Promise 实例具有then 方法,也就是说,then 方法是定义在原型对象
Promise .prototype上的。它的作用是为Promise实例添加状态改变时的回调函数。
then方法的第一个参数是resolved状态的回调函数,第二个参数是rejected状态的回调函数。
then方法返回的是一个新的Promise实例(注意,不是原来那个Promise实例)。因此可以采用链式写法。即then方法后面在调用另一个then方法。
// 链式操作 Promise精髓:状态 function runAsync1() { var p = new Promise(function (resolve, reject) { setTimeout(function () { console.log('执行1') resolve('huahau1') },2000) }) return p ; } function runAsync2() { var p = new Promise(function (resolve, reject) { setTimeout(function () { console.log('执行2') resolve('huahau2') },2000) }) return p ; } function runAsync3() { var p = new Promise(function (resolve, reject) { setTimeout(function () { console.log('执行3') resolve('huahau3') },2000) }) return p ; } // 链式操作 runAsync1() .then(function (data) { console.log(data); return runAsync2(); }) .then(function (data) { console.log(data); return runAsync3(); }) .then(function (data) { console.log(data); })
输出结果:
采用链式的then方法,可以指定一组按照次序调用的回调函数,此时,前一个回调函数,有可能返回的一个Promise对象(即有异步操作),后一个回调函数,就会等待该Promise对象的状态发生改变,才会被调用。