我正在努力了解这个新功能(顶级异步等待)到底意味着什么from v8 features list
当我尝试在vanila JS中运行时,结果对我来说似乎是完全相同的,这就是我尝试在vanilla JS中执行的操作。
(() => {
let test1 = async() =>
async() => {
return 'true';
};
(async() => {
let result = await test1();
result = await result();
console.log('r', result)
})();
})()
我想知道此功能的确切含义以及使用方法。
答案 0 :(得分:2)
这里是v8's document。对我来说,这是自我描述,对我个人来说非常方便。
以前,您不能无所事事地编写await someAsyncFunction()
,因为要 await ,必须在await
函数内调用async
示例:
main.js
const fs = require('fs');
const util = require('util');
const unlink = util.promisify(fs.unlink); // promisify unlink function
await unlink('file_path'); // delete file
上面的代码不起作用。最后一行会给您一个错误。因此,我们之前所做的是这样的:
async function main() {
const fs = require('fs');
const util = require('util');
const unlink = util.promisify(fs.unlink); // promisify unlink function
await unlink('file_path'); // delete file
}
main();
但是,现在您不必(!)。第一个代码将起作用。
此答案基于我的理解
答案 1 :(得分:0)
顶级异步等待使您可以等待模块顶层的异步函数返回的承诺,而不必声明单独的异步函数。最重要的是,您现在可以方便地export
由异步函数返回的值。
例如,如果没有此功能,则需要创建一个单独的异步函数(通常为“主”异步函数),或使用Promise.then
来对返回值进行顶层处理,并且不能简单地导出返回值。
let test = async () => 'true';
test().then(result => console.log('r', result));
// or even more verbose
(async () => {
console.log(await test());
})();
// This exports a Promise, not the returned value, "true".
export let result = test();
// This throws an Error because export should be at the top-level.
(async () => {
export let result = await test();
})();
但是有了这项新功能,您可以轻松做到:
let test = async () => 'true';
export let result = await test();
console.log(result);
当您要导出必须异步获取的值时,此功能特别有用;例如,您在运行时从网络获得的值,或者是像大型加密套件这样的模块,该模块很大,并且加载缓慢且异步。