我有以下代码。基本上读取文件然后返回内容。
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
}
}
答案 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函数调用。结果实际上是数据。