如何返回承诺的价值,而不是在等待/异步中承诺本身?

时间:2018-08-05 06:09:38

标签: node.js promise

我有以下代码。基本上读取文件然后返回内容。

var result = await promise; return result;

现在,它会返回诺言本身。是否可以立即返回结果?

FileReader.prototype.readInputFile = async function(fileName) {
  var condi = this.validateFileName(fileName);

  if(condi == true) {
    // wrap api, then wait 
    var promise = new Promise((res, rej) => {
      fs.readFile(fileName, { encoding: 'utf-8' }, (err, data) => {
        if(err) {
          console.log(err);
          rej();
        }

        res(data);
      });
    });

    var result = await promise;
    return result;
  } else {
    // not valid file
  }

}

3 个答案:

答案 0 :(得分:0)

不,你不能。 async函数本身仅返回promise。无论您在函数体内返回(或抛出)什么,它最终都会变成Promise.resolve()或Promise.reject()。

答案 1 :(得分:0)

当您调用异步函数时,结果就是承诺。您不能期望异步函数同步返回值,对吧?因此,正确返回了诺言的值。但是,您看到的承诺是异步功能的承诺,而不是内部解决的承诺。 将此console.log放在这两行之间,您会看到它是一个实际值:

var result = await promise;
console.log(result);
return result;

答案 2 :(得分:-1)

现在我明白了,它将返回promise,而不是结果。我确实找到了一种能够返回结果的方法,因此代码可以很不错。

FileReader.prototype.readInputFile是一个异步函数。如果有任何非异步函数调用它,那么结果将是有希望的。如果有任何异步函数,请将此acync函数调用。结果实际上是数据。