欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

认识并使用 Promise

程序员文章站 2022-07-02 22:55:20
...

一、了解 Promise:

Promise 是一个异步操作返回的对象,用来传递异步操作的消息。

可以解决的问题:

  1. 解决了回调地狱问题,不会导致难以维护;
  2. 合并多个异步请求,节约时间。

Promise 有三种状态:

  1. Pending Promise 对象实例创建时的初始态;
  2. Fulfilled 成功时的状态;
  3. Rejected 失败时的状态。

二、使用 Promise:

Promise.then():用来指定 Promise 对象的状态改变时要执行的操作。

let promise = new Promise(function (resolve, reject) {
    resolve('成功');
    //reject('失败');
})

promise.then(function (data) {
    console.log('data: ', data);
},function (err) {
    console.log('err: ', err);
})
复制代码

Promise.all():接收一个数组,数组内是 Promise 实例,必须都成功呢才表示成功。

Promise.race():接收一个数组,数组内是 Promise 实例,最早返回的对象成功了,就变为成功态,如果失败了,就改变状态为失败态。

let fs = require('fs');
function read(url){
    return new Promise(function(resolve, reject){
        fs.readFile(url,'utf8',function(err, data){
            if(err) reject( err);
            resolve( data);
        })
    })
}

Promise.all([read('1.txt'), read('2.txt')]).then(function (data) {
    console.log(data);
},function (err) {
    console.log('err: ', err);
})

Promise.race([read('1.txt'), read('2.txt')]).then(function (data) {
    console.log(data);
},function (err) {
    console.log('err: ', err);
})
复制代码

Promise.resolve():返回一个 Promise 实例,这个 Promise 实例处于 resolve 状态。

Promise.resolve([1,2,3]).then(function(data){
    console.log(data);
});
复制代码

输出:[ 1, 2, 3 ]

Promise.reject():返回一个 Promise 实例,这个 Promise 实例处于 reject 状态。

Promise.reject([1,2,3]).then(null,function(err){
    console.log('err',err)
});
复制代码

输出:err [ 1, 2, 3 ]