提问者:小点点

在嵌套函数中使用async/await时,“await”对此表达式的类型没有影响


基本上,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。


共1个答案

匿名用户

这个函数中也需要有async,因为您要在处理之前返回值。 所以,等待每一个承诺在这里也被解决。

 myList.every(async function (value) {
      //other stuff for preparation
      return await _handleValue(value);
    });