这段代码(使用 promisified fs)有明显错误的括号:
const jsonSource = await fs.readFile(planFilePath).toString();
Run Code Online (Sandbox Code Playgroud)
意图是:
const jsonSource = (await fs.readFile(planFilePath)).toString();
Run Code Online (Sandbox Code Playgroud)
问题是:为什么甚至会编译错误的版本?错误的版本将承诺字符串化为"[object Promise]",然后await运算符应用于该字符串。TS 知道对象的toString()方法Promise<string>返回一个字符串。TS 也知道你不能等待一个字符串,只能等待一个承诺。那么为什么要编译呢?
这会编译,因为几乎每个值都可以等待,请尝试在浏览器中运行下面的示例。
(async function() {
console.log(await Promise.resolve(console.log('')));
const test = 'testing';
console.log(await test);
console.log(await 33);
}());
Run Code Online (Sandbox Code Playgroud)
文档说明了这种行为:
如果该值不是 Promise,它会将值转换为已解决的 Promise,并等待它。
文档:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |