1. 程式人生 > >Node.js用ES6原生Promise對異步函數進行封裝

Node.js用ES6原生Promise對異步函數進行封裝

param http title call 知識共享 reject comment async node

目錄(?)[+]

Promise的概念

Promise 對象用於異步(asynchronous)計算.。一個Promise對象代表著一個還未完成,但預期將來會完成的操作。

Promise的幾種狀態:

  • pending:初始狀態,即等待操作的執行
  • fulfilled:成功的操作
  • rejected:失敗的操作

pending的狀態既可以轉為fulfilled,也可以轉為rejected,當狀態發生改變時,promise.then(onFulfilled, onRejected)方法將被調用

Promise的基本用法

1.首先創建一個Promise的實例

var promise = new Promise(function(resolve, reject){
    //do something
    if(success){
        resolve(value);
    } else {
        reject(value);
    }
});

用Promise來封裝異步函數

Node.js中的IO操作都是異步的,因此在寫異步程序的過程中容易掉進回調大坑

知道了Promise的基本調用過程,我們就可以用來封裝異步的函數了

1.定義函數

function sendRequest(){
    return new Promise(function(resolve, reject){
        var req = http.request(options, function(res){
            var data = ‘‘;
            res.on(‘data‘, function(chunk){
                data += chunk;
            });

            res.on(‘end‘, function(){
                //成功後調用
                resolve(data);
            });
        });

        req.on(‘error‘, function(err){
            //失敗後調用
            reject(err);
        });

        req.end();
    });
}

2.調用函數

sendRequest().then(function(data){
    console.log(data);
}).catch(function(err){
    console.log(err);
});

Node.js用ES6原生Promise對異步函數進行封裝