Promise
跳转到“Promise”“承诺将来会执行”的对象在JavaScript中称为Promise对象。
// 生成一个0-2之间的随机数,如果小于1,则等待一段时间后返回成功,否则返回失败function test(resolve, reject) { let timeOut = Math.random() * 2; log('set timeout to: ' + timeOut + ' seconds.'); setTimeout(function () { if (timeOut < 1) { log('call resolve()...'); resolve('200 OK'); } else { log('call reject()...'); reject('timeout in ' + timeOut + ' seconds.'); } }, timeOut * 1000);}这个test()函数有两个参数,这两个参数都是函数,如果执行成功,我们将调用resolve('200 OK'),如果执行失败,我们将调用reject('timeout in ' + timeOut + ' seconds.')。可以看出,test()函数只关心自身的逻辑,并不关心具体的resolve和reject将如何处理结果。
// 有了执行函数,我们就可以用一个Promise对象来执行它,并在将来某个时刻获得成功或失败的结果:let p1 = new Promise(test);let p2 = p1.then(function (result) { console.log('成功:' + result);});let p3 = p2.catch(function (reason) { console.log('失败:' + reason);});
// 变量p1是一个Promise对象,它负责执行test函数。由于test函数在内部是异步执行的,当test函数执行成功时,我们告诉Promise对象:// 如果成功,执行这个函数:p1.then(function (result) { console.log('成功:' + result);});
// 当test函数执行失败时,我们告诉Promise对象:p2.catch(function (reason) { console.log('失败:' + reason);});
// Promise对象可以串联起来,所以上述代码可以简化为:new Promise(test).then(function (result) { console.log('成功:' + result);}).catch(function (reason) { console.log('失败:' + reason);});