常用资料(记得收藏)
nodejs的所有调用几乎是全异步的,而所有的IO操作也都是通过回调函数才能知道结果。 如果一个异步调用依赖另一个异步调用,如果没有Promise的话,代码会写的很诡异,看起来就像金字塔一样。
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的出现,缓解了这种情况
安装
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最原始的用法)
简单的写法是这样的
var readFileAsync = Promise.promisify(fs.readFile)