2017-09-18 8 views
0

IはPNG画像にDOMを変換するためのDOMツーimage.jsを使用します。 dom-to-image.jsがpromiseを使用するので、コードは非同期で実行されます。私は実行したいと思います。promiseをどのように同期させて実行するのですか?

私は、次のコードを持っている:私はconsole.log("this console should be executed after console.log(dataUrl)")を実行する前に、まず.then機能を実行したい

domtoimage.toPng(document.getElementById("main")).then(function(dataUrl) { 
    console.log(dataUrl); 
}).catch(function(error) { 
    console.error('oops, something went wrong!', error); 
}); 

console.log("this console should be executed after console.log(dataUrl)") 

を。

私にこれを達成するためのいくつかの方法を教えてください。

+1

なぜ、その後の中にそれを入れていませんか?または連鎖するか? –

+1

これは、[XY問題](https://meta.stackexchange.com/q/66377/313880)のように思えます。私は信頼できません.1、これは不可能であり、2、それはパフォーマンスを妨げるので、約束を同期して実行しません。何を実際にここで達成しようとしていますか? –

答えて

-1

あなたはそれが正確に何をしたいですので、私はasync/awaitをお勧めしますよりも使用することができます。

あなたのコードは次のように構成する必要があります:あなたはこのようなオンラインさらにチュートリアルを見つけることができます

async function mySynchronousPromise(){ 
    await domtoimage.toPng(document.getElementById("main")).then(function(dataUrl) { 
     console.log(dataUrl); 
    }).catch(function(error) { 
     console.error('oops, something went wrong!', error); 
    }); 
    console.log("this console should be executed after console.log(dataUrl)") 
} 

https://hackernoon.com/6-reasons-why-javascripts-async-await-blows-promises-away-tutorial-c7ec10518dd9

+2

潜在的な解決策へのリンクはいつでも歓迎ですが、[リンクの前後にコンテキストを追加する](// meta.stackoverflow.com/a/8259)ので、仲間のユーザーには何か、なぜそれがあるのか​​が分かります。 **ターゲットサイトが到達不能であるか、または永続的にオフラインになる場合に、重要なリンクの最も関連性の高い部分を常に引用します。**外部サイトへのリンク以上であることを考慮すると、[理由と理由いくつかの回答はどのように削除されますか?](// stackoverflow.com/help/deleted-answers) –

1

あなたが本当にJavaScriptで発生する非同期計算のために待つことができません。あなたが行うことができる唯一のことは、計算が完了したときに何をしたいのかを宣言することです。

async/awaitを使用すると、コードはあなたの説明どおりに見えますが、計算はまだ非同期です。あなたはどちらかthenにログを移動することができます。

domtoimage.toPng(document.getElementById("main")).then(function(dataUrl) { 
    console.log(dataUrl); 
    console.log("this console should be executed after console.log(dataUrl)") 
}).catch(function(error) { 
    console.error('oops, something went wrong!', error); 
}); 

か/非同期を使用するには、より通常のコードのように、このを作るために待っています:

async function myFunc(){  
    try{ 
     dataUrl = await awaitdomtoimage.toPng(document.getElementById("main")) 
     console.log(dataUrl); 
     console.log("this console should be executed after console.log(dataUrl)") 
    } 
    catch(error) { 
     console.error('oops, something went wrong!', error); 
    } 
関連する問題