基本上,Visual Studio代码给我的提示是“await”对此表达式的类型没有影响。
但我可以跟踪实际问题。 当然,我这里的例子有一点嵌套,因此比它可能要复杂一点。 它从一个数组开始,我要检查它的值是否有效。 如果on值测试失败,。Every函数应该结束。
myList.every(function (value) {
if(value == null) return false;
//other stuff for preparation
return _handleValue(value);
});
value是一个复杂的数据类型,因此_handleValue函数被拆分为不同的子函数。 有些功能使用的是承诺,有些(atm)不使用。 请忽略if块中的函数,因为代码被简化了,而且这不会导致问题。
async function _handleValue(value) {
if (somePreChecks(value)) {
return false;
}
else if (valueIsType(value)) {
return await _someHandlerwithPromise(value); //<-- Using await here.
} else if (valueIsOtherType(value)) {
return _someOtherHandlerWithoutPromise(value);
}
}
函数_someHandlerWithPromise
有一些使用回调的调用。 无论如何,只要调用reject()
,这应该不是问题。
function _someHandlerWithPromise(value) {
return new Promise(resolve => {
foo.acceptValue(value, function (data) {
_updateSystem(data, function (err, data) {
if(err){
//Do something
}
resolve(true);
});
});
});
}
实际上,这在我不使用await函数的其他地方工作得很好。 但是由于。every不能处理异步方法,我被迫使用await。
这个函数中也需要有async,因为您要在处理之前返回值。 所以,等待每一个承诺在这里也被解决。
myList.every(async function (value) {
//other stuff for preparation
return await _handleValue(value);
});