Promise實現之bluebird 5分鐘入門教程

經常使用資料(記得收藏)

nodejs的全部調用幾乎是全異步的,而全部的IO操做也都是經過回調函數才能知道結果。 若是一個異步調用依賴另外一個異步調用,若是沒有Promise的話,代碼會寫的很詭異,看起來就像金字塔同樣。html

fs.readFile('1.txt', function(err, data){
    if(err){
        console.log(err);
        return;
    }
    fs.readFile('2.txt', function(err, data){
        if (err){
            console.log(err);
            return;
        }
        console.log(data);
        fs.readFile('3.txt', .....
        .....
    })
})

還好bluebird的出現,緩解了這種狀況node

安裝

npm install --save bluebird

使用

var fs = require('fs');
var Promise = require('bluebird');

var readFileAsync = function(name){
    return new Promise(function(resolve, reject){
        fs.readFile(name, function(err, data){
            if(err) {
                reject(err);
            } else {
                resolve(data);
            }
        });
    })
})

readFileAsync('1.txt')
.then(function(data1){
    console.log(data1);
    return readFileAsync('2.txt');
})
.then(function(data2){
    console.log(data2);
})
.catch(function(err){
    console.error(err)
})

你可能覺的那個readFileAsync那個函數怎麼這麼長。(我寫成那樣,實際上是爲了讓你理解bluebird最原始的用法)npm

簡單的寫法是這樣的異步

var readFileAsync = Promise.promisify(fs.readFile)
相關文章
相關標籤/搜索