function delay(count) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(1000);
}, count);
});
}
async function method1() {
let val = 0;
console.log("one");
val = delay(3000);
console.log("two")
return val;
}
method1().then(function(result) {
console.log(result);
});
以上是我的示例代码。
首先,我没有使用 await delay()
,这就是我的意图。
首先,上述代码的预期编写流程如下:
- console.log("one")
- console.log("两个")
- 返回值;
- console.log(结果)
- 解决(1000);
但现实却有所不同。实际执行结果如下 如下。
- console.log("one")
- console.log("两个")
- 解决(1000)
- 返回值;
- console.log(结果)
我期望首先执行return val
的原因是因为
这是因为我们相信其余的代码将是
当 delay()
函数以异步方式进行时执行
沟通。 但是,实际上,return
直到 delay()
被执行后才被执行。
完成了。
如果我使用awaitdelay()
,则在delay()
处暂停。 setTimeout
退出后,console.log("two")
被执行,我完全理解这个概念。
但是,如果不使用await
,则执行其余代码,但是
为什么要等到delay()
完成后才执行return?
最佳答案
This is because we believed that the rest of the code would be executed while the delay() function proceeded
您的代码与此等效。您正在向 val
分配一个 promise 。由于 val
是一个 Promise
,因此您可以使用 then
,并且在 3000 毫秒后解析时,它会记录 then< 内的值
async function method1() {
let val = 0;
console.log("one");
val = new Promise(function(resolve) {
setTimeout(function() {
resolve(1000);
}, 3000);
});
console.log("two")
return val;
}
method1().then(function(result) {
console.log('**', result);
});
来自评论
As far as I know a promise is simply a piece of code that runs when a certain action completes.
Promise 被急切地加载。在执行程序完成之前,构造函数不会返回。当执行器获得结果时,它会调用函数resolve
或reject
之一。因此,它不是在某个操作完成时运行的一段代码
在下面的示例中,您可以看到 Promise 在分配给变量后立即执行
async function method1() {
let val = 0;
console.log("one");
val = new Promise(function(resolve) {
setTimeout(function() {
console.log('Inside Promise')
resolve(1000);
}, 3000);
});
console.log("two")
return val;
}
method1()
关于javascript - 我有一个关于 js Async Await 行为结构的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68519231/