[英]Async function won't return when the promise is resolved
我有以下代码:
let checkValue = async (nodeUrl, nodeName, value) => {
let json = await getValue(nodeUrl, value);
let obj = JSON.parse(json.value.information);
for (let i = 0; i < obj.nodes.length; i++) {
if (obj.nodes[i] === nodeName) {
return Promise.resolve(true);
}
}
return Promise.resolve(false);
}
我尝试使用Promise.resolve()
处理返回的Promise值,但仍然得到Promise { <pending> }
返回。 为什么会这样呢?
让我们来解释一下async
函数中会发生什么。
首先,所有异步函数都返回一个Promise。 总是。 您将始终需要使用.then()
或await
从返回的await
中获取值。
其次,这是函数中事件的顺序。
checkValue(...)
并传递其参数。 await getValue()
。 getValue()
并收到一个promise。 await
,因此它将中止该函数的进一步执行,并且在那个时间点,该函数将返回一个未解决的Promise。 getValue()
之后的其余代码将继续执行。 getValue()
解析其诺言的事件。 getValue()
承诺中的解析值分配给您的json
变量,并且checkValue()
函数的执行被取消暂停并继续执行。 for
循环中的值,函数将通过返回已解析的promise来完成。 请注意,没有理由return Promise.resolve(true)
或return Promise.resolve(false)
。 只需return true
或return value
。 无论async
函数的return
值是什么,该值都会成为已从该函数return
的async
的解析值。 口译员为您完成。 我尝试使用Promise.resolve()处理返回的Promise值,但仍然得到
Promise { <pending> }
返回。 为什么会这样呢?
首先,您将获得一个承诺,因为所有async
函数都将返回一个承诺。
其次,它在您检查时尚未解决,因为该函数在第一次await
时被挂起,并且那是async
函数实际上返回了promise的那一刻,但由于该函数尚未完成执行而尚未解决(由于await
)。 请参阅上面的步骤4。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.