2017-08-12 13 views
-1

Typescriptに以下の非同期関数があります。予想通りにawaitがブロックして必要な結果を得ているようです。Typescript asyncが動作しなくなるのを待つ

async function getCroppedImgContent(origImgBuffer: Buffer) { 
    console.log("Inside setCroppedImgContent"); 
    let croppedBuffer = await sharp(origImgBuffer) 
    .resize(4000, 4000) 
    .max() 
    .toBuffer(); 
    console.log("After crop"); 

    return croppedBuffer; 
} 

"After crop"は、 "Inside setCroppedImgContent"の直後には表示されませんが、後で多く表示されます。待っているように見えますが動作していません。

+0

問題はどのようなものです:

あなたはgetCroppedImgContent後に実行されるconsole.log("After setCroppedImgContent");をしたい場合は、あなたがawaitへの呼び出しを必要と完了していますか? – Amit

+0

'await'はあなたが約束を待っているときにのみ本当に便利なので、' sharp()。resize()。max()。toBuffer() 'は約束を返します。 – jfriend00

+0

await行で実行がブロックされず、結果が後で返されます。 – Nenad

答えて

2

Nenad、関数内でawaitを使用したという事実は、それが同期して実行されるわけではありません。 awaitは、1回の呼び出しで実行をブロックするだけです。

await getCroppedImgContent(origContent) 
    .then(function (croppedBuffer) { 
    image.content = croppedBuffer; 
    console.log("Set image content"); 
}); 
+2

しかしこの場合、このコードは新しい関数に追加され、 'async'キーワードでマークされるべきです。 – alexmac

+0

"After crop"については、 "Inside setCroppedImgContent"の後には印刷しないでください。私の場合はそうではなく、それが私の最大の問題です。私はコメントのために呼び出しコードを追加しましたが、それは無関係です。 – Nenad

+0

あなたの説明を完全に変更したところ、正しい動作と思われるようです。 –

関連する問題