当我试图理解js回调时,我遇到了这个问题。
在这里,我试图在aa
之后提醒2500 ms
,即当aa的值得到解决,但我得到的结果为1.为什么?
我认为aa
在这里是未定义的,但是b()在调用堆栈中。它应该解析aa
的实际值。
如果我错了,请纠正我。
function a(b){
var aa = b();
setTimeout(function(){
alert(aa)
},3000)
}
function b() {
return setTimeout(function() {
return 'alert this value !';
},2500)
}
a(b);
答案 0 :(得分:1)
您无法从异步函数返回值。获得类似行为的一种方法是使用promises:
async function a(b){
var aa = await b();
setTimeout(function(){
alert(aa)
},3000)
)
function b() {
return new Promise( (resolve, reject) => {
setTimeout(function() {
resolve( 'alert this value !' );
},2500)
}
}
a(b);
当您没有async
/ await
时,您也可以then()
使用a()
承诺回调:
function a(b){
b().then( (value) => {
setTimeout(function(){
alert(value)
},3000)
});
)