Promise运用

宣布自
Kindem的博客,迎接人人转载,然则要注意说明出处。别的,该文章收纳在
Kindem的个人的 IT 学问整顿堆栈,迎接 Star、Fork、投稿

Promise

因为JavaScript是单线程的,所以回调是JavaScript中避免不了的,一切的收集要求、浏览器事宜都须要运用回调的体式格局异步处置惩罚。

一旦要求、事宜多了,就避免不了回调地狱,回调极可能轻易一层接着一层。

Promise的意义是许诺,作用和回调函数类似,在将来的某个时候实行某件事变。然则Promise的写法越发简约易用,越发相符我们寻常的头脑。

Usage

Promise是一个对象,在ES6已被范例成了原生JavaScript的一部分,然则在ES6之前,则须要运用第三方库来完成

Promise分为三个状况:

  • pending: 实行中
  • resolved: 已完成
  • rejected: 已失利

Promise对象被实例化的那一刻,传入组织函数的要领将会被实行,而且进入pending状况,而一旦完成或许失利,则会进入响应的状况,这一历程是不可逆的

他的用法(ES6)以下:

let promise = new Promise((resolve, reject) => {
    if (...) {
        // 假如胜利了
        resolve(...);
    } else {
        // 假如失利了
        reject(...);
    }
});

这里的resolvereject两个要领可以运用下面的要领来授与:

promise
    .then(onSuccess)
    .catch(onFailed);

传递给then的要领将在许诺实行胜利时被挪用,传递给catch的要领将在许诺实行失利时被挪用

越发轻易的一点是,Promise每每可以嵌套运用,如许可以是多个使命井井有条地举行,假定p1是一个Promise对象而p2p3都是可以发生Promise对象的要领(假如直接new那末Promise将会被直接实行),那末你可以如许写,使得他们根据递次实行,而且可以一次性处置惩罚他们发生的毛病

p1
    .then(p2)
    .then(p3)
    .then(onSuccess)
    .catch(onFailed);

比方:

let p1 = new Promise((resolve, reject) => {
    console.log('p1');
    setTimeout(() => {
        resolve('p2');
    }, 1000)
});

let p2 = (result) => new Promise((resolve, reject) => {
    console.log(result);
    setTimeout(() => {
        resolve('p3');
    }, 2000);
});

let p3 = (result) => new Promise((resolve, reject) => {
    console.log(result);
    setTimeout(() => {
        resolve('over');
    }, 3000);
});

p1
    .then(p2)
    .then(p3)
    .then((result) => {
        console.log(result);
    })
    .catch((error) => {
        console.log(error);
    });

运转可以瞥见:

p1
p2
p3
over
    原文作者:流渚微梦
    原文地址: https://segmentfault.com/a/1190000016127398
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞