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