Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Typescript异步等待不工作_Node.js_Typescript_Async Await - Fatal编程技术网

Node.js Typescript异步等待不工作

Node.js Typescript异步等待不工作,node.js,typescript,async-await,Node.js,Typescript,Async Await,我在Typescript中有下面的异步函数,而wait似乎并没有像我期望的那样阻塞并产生所需的结果 async function getCroppedImgContent(origImgBuffer: Buffer) { console.log("Inside setCroppedImgContent"); let croppedBuffer = await sharp(origImgBuffer) .resize(4000, 4000) .max() .toB

我在Typescript中有下面的异步函数,而wait似乎并没有像我期望的那样阻塞并产生所需的结果

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

“裁剪后”不是在“内部设置裁剪内容”之后立即打印,而是要晚很多。看起来等待不起作用。

Nenad,在函数中使用
wait
并不意味着它将同步执行<代码>等待只会阻止单个调用的执行

如果需要
console.log(“setcropedimgcontent之后”)
getCroppedImgContent
完成后执行。您需要
等待它的调用:

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

Nenad,在函数中使用
wait
并不意味着它将同步执行<代码>等待
只会阻止单个调用的执行

如果需要
console.log(“setcropedimgcontent之后”)
getCroppedImgContent
完成后执行。您需要
等待它的调用:

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

有什么问题吗?
sharp()。我已经在调试器中检查过它。@jfriend00是的,它是:有什么问题吗?
sharp().resize().max().toBuffer()
是否返回承诺,因为
wait
只有在等待承诺时才真正有用。在等待行中不会阻止执行,稍后返回结果是的,它返回承诺。我已在调试器中对其进行了检查。@jfriend00是的,确实如此:但在这种情况下,应将此代码添加到新函数中,并用
async
关键字进行标记。那么“裁剪后”怎么办?是否应在“Inside setCroppedImgContent”之后打印?在我的情况下不是,这是我最大的问题。由于注释,我添加了调用代码,但这是无关的。现在你完全改变了你的描述,而且看起来我会考虑正确的行为。“后茬”不立即打印,因为执行被阻塞,等待完成的承诺。但是在这种情况下,这个代码应该被添加到一个新的函数中,并用
async
关键字标记。那么“裁剪后”怎么办?它不应该打印在“内部设置裁剪内容”之后吗?在我的情况下不是,这是我最大的问题。由于注释,我添加了调用代码,但这是无关的。现在,您完全更改了您的描述,并且它似乎是我认为正确的行为。“后茬”不立即打印,因为执行被阻塞,等待完成的承诺。