promise
promise
一個標準,它描述了異步調用的返回結果,包括正確返回結果和錯誤處理。關於詳細的說明文檔能夠參考Promises/A+。目前實現promise
標準的模塊有不少,如Q、bluebird和Deferred,下面咱們以Q爲例,介紹一下promise
在nodejs
中的使用方法。php
我查找了關於promise的使用,其中最好用的就是q.js了,我的以爲。固然還有promise.js,有興趣的朋友能夠研究一下,這裏主要說一下q.js的用法。html
首先下載安裝q.js——node
npm install q
1、使用Q.nfcallweb
相對於Q.fcall ,Q.nfcall 就是node 的Q.fcall。npm
var FS = require('fs'),
Q = require('q'),
colors = require('colors'),
file = 'example.txt';
var fsReadFile = Q.nfcall(FS.readFile,file,encoding);
fsReadFile.then(function(result){
console.log((「invoke in nfcall 」 + file).red);
console.log(result.green);
},function(error){
console.log(「invoke in nfcall」.red);
console.log(error.toString().red);
}
);promise
Q.fcall(function () {
return "1";
})
.then(function(value2){
console.log("打印", value2);
return User.test(value2);
})
.then(function (value3) {
console.log(value3);
return "3";
})
.then(function (value4) {
console.log(value4);
return "4";
})
.then(function (value4) {
// Do something with value4
console.log("顯示:", value4);
})
.catch(function (error) {
// Handle any error from all above steps
})
.done();異步
2使用Q.denodeifyui
var fsReadFile_denodeify = Q.denodeify(FS.readFile);
fsReadFile_denodeify(file,encoding).then(function(result){
console.log("invoke in denodeify".red);
console.log(result.green)
},function(error){
console.log("invoke in denodeify".red);
console.log(error.toString().red);
}
);
3、使用Q.deferdurl
var fsReadFile_deferd = function(file,encoding){
var deferred = Q.defer();
FS.readFile(file,encoding,function(error,result){
if(error){
deferred.reject(error.toString().red);
}
deferred.resolve(result);
});
return deferred.promise;
};
fsReadFile_deferd(file).then(function(result){
console.log("invoke in deferd".red);
console.log(result.toString().green);
},function(error){
console.log("invoke in deferd".red);
console.log(error.toString().red);
}
);
4、使用makeNodeResolver()spa
var fsReadFile_makeNodeResolver = function(file,encoding){
var deferred = Q.defer();
FS.readFile(file,encoding,deferred.makeNodeResolver());
return deferred.promise;
};
fsReadFile_makeNodeResolver(file,encoding).then(function(result){
console.log("invoke in makeNodeResolver".red);
console.log(result.green);
},function(error){
console.log(error.toString().red);
});