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实现,传递resolvereject函数立即执行

(在Promise构造函数甚至返回创建的对象之前调用执行程序)。的resolvereject函数被调用时,解决或拒绝承诺,
分别。执行程序通常启动一些异步工作,然后,一旦完成,要么调用resolve函数来解析promise ,要么在发生错误
时拒绝它。如果执行程序函数中抛出错误,则拒绝承诺。执行程序的返回值将被忽略。

描述部分

Promise是创建promise时不一定知道的值的代理。它允许您将处理程序与异步操作的最终成功值或失败原因相关联。这允许异步方法返回类似于同步方法的值:异步方法返回一个承诺,在将来的某个时刻提供值,而不是立即返回最终值

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(即相关处理程序onFulfilledonRejected 不是函数),则返回其原始的已结算值  
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();
  });
}
 

posted on 2018-12-02 17:30  葛梦慧  阅读(129)  评论(0编辑  收藏  举报

导航