Promise
Promise
对象表示异步操作的最终完成(或失败)及其结果值
var promise1 = new Promise(function(resolve, reject) {
setTimeout(function() {
resolve('foo');
}, 300);
});
promise1.then(function(value) {
console.log(value);
// expected output: "foo"
});
console.log(promise1);
// expected output: [object Promise]
语法部分
new Promise( /* executor */ function(resolve, reject) { ... } );
执行者与参数
resolve
和传递的函数reject
。该executor
函数由Promise实现,传递resolve
和reject
函数立即执行
(在Promise
构造函数甚至返回创建的对象之前调用执行程序)。的resolve
和reject
函数被调用时,解决或拒绝承诺,
分别。执行程序通常启动一些异步工作,然后,一旦完成,要么调用resolve
函数来解析promise ,要么在发生错误
时拒绝它。如果执行程序函数中抛出错误,则拒绝承诺。执行程序的返回值将被忽略。
描述部分
A Promise
是创建promise时不一定知道的值的代理。它允许您将处理程序与异步操作的最终成功值或失败原因相关联。这允许异步方法返回类似于同步方法的值:异步方法返回一个承诺,在将来的某个时刻提供值,而不是立即返回最终值。
A Promise
处于以下状态之一:
- 待定:初始状态,既未履行也未拒绝。
- 履行:意味着操作成功完成。
- 拒绝:意味着操作失败。
待处理的承诺可以使用值来实现,也可以使用原因(错误)拒绝。当这些选项中的任何一个发生时,将then
调用由promise 方法排队的关联处理程序。(如果在附加相应的处理程序时已经履行或拒绝了promise,则将调用该处理程序,因此在异步操作完成和附加处理程序之间没有竞争条件。)
由于
和Promise.prototype.then()
方法返回承诺,它们可以被链接。Promise.prototype.catch()
属性部分
Promise.length
- Length属性,其值始终为1(构造函数参数的数量)。
Promise.prototype
- 表示
Promise
构造函数的原型。
方法科
Promise.all(iterable)
- 返回一个promise,它在iterable参数中的所有promise都已满足时满足,或者在iterable参数中的一个promise中拒绝后立即拒绝。如果返回的promise履行,则使用与iterable中定义的顺序相同的顺序完成承诺中的值的数组来实现。如果返回的promise拒绝,它将被拒绝,其原因来自可拒绝的iterable中的第一个promise。此方法可用于聚合多个承诺的结果。
Promise.race(iterable)
- 返回一个承诺,一旦迭代中的一个承诺履行或拒绝,就会履行或拒绝该承诺,并使用该承诺的价值或理由。
Promise.reject(reason)
- 返回
Promise
因给定原因而被拒绝的对象。 Promise.resolve(value)
- 返回
Promise
使用给定值解析的对象。如果值是一个值得(即有一个then
方法),那么返回的promise将“跟随”那个,然后采用它的最终状态; 否则返回的承诺将与值一起实现。通常,如果您不知道某个值是否是一个承诺,Promise.resolve(value)
那么它将使用返回值作为承诺。 -
承诺原型部分
属性部分
Promise.prototype.constructor
- 返回创建实例原型的函数。这是
Promise
默认的功能。
方法科
Promise.prototype.catch(onRejected)
- 将拒绝处理程序回调附加到promise,并返回一个新的promise,如果调用它,则解析为回调的返回值,如果相应地履行了promise,则返回其原始的履行值。
Promise.prototype.then(onFulfilled, onRejected)
- 将履行和拒绝处理程序附加到promise,并返回一个新的promise,解析为被调用者的返回值,如果未处理promise(即相关处理程序
onFulfilled
或onRejected
不是函数),则返回其原始的已结算值 。 Promise.prototype.finally(onFinally)
- 向promise添加处理程序,并返回在解析原始promise时解析的新promise。当承诺得到解决时,无论是履行还是拒绝,都会调用处理程序。
创建承诺部分
甲
Promise
对象使用所创建的new
关键字和它的构造。该构造函数将一个函数作为其参数,称为“执行函数”。该函数应该将两个函数作为参数。resolve
当异步任务成功完成时,将调用其中第一个函数(),并将任务结果作为值返回。reject
任务失败时调用second(),并返回失败原因,通常是错误对象。const myFirstPromise = new Promise((resolve, reject) => { // do something asynchronous which eventually calls either: // // resolve(someValue); // fulfilled // or // reject("failure reason"); // rejected });
要提供具有承诺功能的函数,只需让它返回一个承诺:
function myAsyncFunction(url) { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.open("GET", url); xhr.onload = () => resolve(xhr.responseText); xhr.onerror = () => reject(xhr.statusText); xhr.send(); }); }