2017-08-12 111 views
-1

我在打字稿中有以下异步功能,看起来await不会阻止并按照我的预期生成所需的结果。打字稿异步等待不工作

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; 
} 

“作物后”不立即“内部setCroppedImgContent”后打印,但很多版本。看起来像等待不起作用。

+0

问题是什么? – Amit

+0

'sharp()。resize()。max()。toBuffer()'返回一个承诺,因为'await'只在你等待承诺时才真正有用。 – jfriend00

+0

执行没有被阻塞在等待线上,结果稍后返回 – Nenad

回答

2

Nenad,您在函数中使用了await这一事实并不意味着它将被同步执行。 await只是让一次呼叫的执行被阻止。

如果你想console.log("After setCroppedImgContent");getCroppedImgContent后执行完毕,你需要await呼吁:

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

但在这种情况下,应将此代码添加到新函数中,并用'async'关键字标记。 – alexmac

+0

关于“裁剪后”,不应该在“Inside setCroppedImgContent”之后打印?在我看来,这不是,那是我最大的问题。由于评论的原因,我添加了调用代码,但这并不重要。 – Nenad

+0

现在你完全改变了你的描述,看起来我会考虑正确的行为。 –