javascript回调不能正常工作

时间:2017-07-01 07:58:37

标签: javascript

当我试图理解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);

1 个答案:

答案 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)
    });
)