promise 跟回调函数相比,可以让我们更方便地定义
异步返回后的操作。
//指定函数名 a、blet p = new Promise(function(a, b){ //指定promise什么时候改变状态,以及改变时传递的数据 setTimeout(()=>a('I am resolve message'), 1000)//1 setTimeout(()=>b('I am reject message'), 3000);//2});//指定改变时的回调函数,来处理数据p.then(msg=>console.log(msg), msg=>console.log(msg))
我们不用操心改变状态这个过程的实现,而只需要指定函数名a
、b
——它们的函数体由浏览器定义,功能分别是将promise
的状态变成“成功”和“失败”。
当promise
状态改变时,浏览器就会调用回调函数。
注意 promise
的状态只能从“未完成”变成“成功”或“失败”,而不能从“成功”变成“失败”,所以上面代码中,当1生效后,2就不会生效了。另外传递的数据可以是任何类型,甚至可以是promise
类型来实现链式调用。
理解了基本的流程,其他的API应该也很容易了。