我一直在浏览async/await,经过几篇文章后,我决定自己测试一下.但是,我似乎无法理解为什么这不起作用:
async function main() {
var value = await Promise.resolve('Hey there');
console.log('inside: ' + value);
return value;
}
var text = main();
console.log('outside: ' + text);
Run Code Online (Sandbox Code Playgroud)
控制台输出以下内容(节点v8.6.0):
>外面:[对象承诺]
>里面:嘿那里
为什么函数内部的日志消息会在之后执行?我认为创建async/await的原因是为了使用异步任务执行同步执行.
有没有办法可以使用函数内部返回的值而不使用asyncafter await?
如果我输入debugger并想检查一下。但是调用该函数会返回一个Promise,然后我被困住了。
例如:
我输入调试器,它停止了。
function test(db) {
debugger;
// here i want to see something
var a = .....;
}
Run Code Online (Sandbox Code Playgroud)
但是如果我输入
let d = db.User.create();
Run Code Online (Sandbox Code Playgroud)
我去拿
Promise { pending }
Run Code Online (Sandbox Code Playgroud)
现在没有追索权。我不能简单地评估承诺。Kinda使整个调试器的用处不大。
这是没有问题的,如果它是同步的,我将能够跳入程序中间,检查一些内容并根据自己的喜好修改程序,然后运行程序的其余部分。
我很困惑,因为我读到 ESM 支持顶级等待,但是当我在 html 文件中尝试它时它不起作用?
我是否发现这样说: 顶级等待不适用于节点 14.13.- “顶级等待仅适用于 ESM 模块”
ESM 是否支持顶级等待以及如何使用它。
document.getElementById('foo').innerHTML = 'hello1';
await pause(2000); // is this possible if so how
document.getElementById('foo').innerHTML = 'hello2';
Run Code Online (Sandbox Code Playgroud)