ES6 Promise的问题

function runAsync(callback){
    setTimeout(function(){
        console.log('111');
        callback('222');
    }, 2000);
}

runAsync(function(data){
    console.log(data);
});

刚接触这个 请问 callback('222')这行代码是什么意思 ?

阅读 2.9k
4 个回答

2000毫秒后打印出 111 并调用传进来的callback函数,传入实参 222

这不是Promise,是回调。

function runAsync(callback){
    setTimeout(function(){
        console.log('111');
        callback('222');
    }, 2000);
}
runAsync(param => console.log(param));

运行结果如下:
图片描述

回调函数。
因为异步使你无法得到逐行自上而下运行代码的结果,异步任务会使当前作用域的同步任务执行完才执行异步的结果。
就像你定了一份外卖,是无法立即送达的,而你又要事先填好收货地址(否则你永远拿不到外卖,而这个callback,就是你订外卖的收货地址)。

Promise是异步中的微任务(跟你这个例子没什么关系),而你这里的setTimeout是一个异步中的宏任务。

类似模拟Promise返回数据,平时mock数据时可以用,加上定时器实际是模拟ajax请求后端数据的延时。

runAsync(function(data){
    //console.log(data);
    return Promise.resolve(data);
});

这个函数里面的回调函数可以返回data,此data即是你mock的数据,比如你按照接口协议返回的数据是

{
  status:‘success’,
  data: {
    list: [],
    field: {},
    ....
  }
}

runAsync中返回的data可以用.then(res => {/res即data值,其他后续逻辑在此处完成/})

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进