Javascript中Promise的简单使用
1 // 函数功能:1秒以后创建一个10以内的随机整数,并判断这个数是否为偶数;如果是偶数则做一件事情,如果是奇数则做另一件事情 2 function doSomthing() { 3 var promise = new Promise(function (resolve, reject) { 4 setTimeout(function () { 5 const num = Math.round(Math.random() * 10); 6 if (num % 2 === 0) { 7 resolve(num); 8 } else { 9 reject(num); 10 } 11 }, 1000); 12 }); 13 return promise; 14 }
1 // 调用方法,得到Promise对象,并在Promise中的事情执行完成之前,预先指定成功和失败的回调函数 2 // 成功和失败的回调函数,分别对应new这个Promise对象时,传递的匿名function中的resolve和reject这两个形参 3 doSomthing().then(function (val) { 4 console.log('第一次偶数:' + val); 5 return doSomthing(); // 当事情处理完毕之后,可以return一个新的Promise对象,并继续使用.then指定下一次的回调函数 6 }, function (val) { 7 console.log('第一次奇数:' + val); 8 return doSomthing(); 9 }).then(function (val) { 10 console.log('第二次偶数:' + val); 11 return doSomthing(); 12 }, function (val) { 13 console.log('第二次奇数:' + val); 14 return doSomthing(); 15 }).then(function (val) { 16 console.log('第三次偶数:' + val); 17 }, function (val) { 18 console.log('第三次奇数:' + val); 19 });
Promise总结:
- Promise表示要做一件事,要做的事情,需要在new Promise对象的时候指定
- 一旦这个Promise对象new出来之后,则立即就会去做这个Promise对象中指定的事情(所以如果不想立即做这件事,可以将new Promise对象的过程放在一个方法中)
- 做任何事情都有一个过程,所以在这个Promise中的事情做完之前,我们不知道这件事最终执行的结果是成功还是失败,
- 但我们可以肯定的是,这个事情做完之后,肯定有一个执行的结果,要么这件事做成功了,要么这件事做失败了,且会将这个执行结果进行相关操作;
- 所以,我们可以提前为这个Promise对象,通过resolve方法指定成功之后的处理函数,通过reject方法指定失败之后的处理函数
- 那么,如何提前指定resolve和reject这两个处理函数呢?可以在Promise对象身上,调用.then(成功回调函数,失败回调函数)方法预先指定成功和失败的处理函数!
- 这样,当Promise对象中的事情做完之后,就会调用预定义的成功或失败处理函数
- 在成功和失败的处理函数内部,又可以创建一个新的Promise对象,来执行下一件事情,并通过下一个.then预先指定成功和失败的回调函数!