Regarding what promise is and what the promise solves, please experience the callback asynchronous encoding method of node, and then move to http://wiki.commonjs.org/wiki/Promises/A to see how it is defined. I won’t go into details here.
Here we will see how to use q.js to implement the promise of node api.
1. Everything starts with install
The code copy is as follows:
npm install q
2. Promise method of standard node style api
1. Use Q.nfcall
Compared with Q.fcall, Q.nfcall is the Q.fcall of node.
The code copy is as follows:
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);
}
);
2. Use Q.denodeify
The code copy is as follows:
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. Use Q.deferd
The code copy is as follows:
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. Use makeNodeResolver()
The code copy is as follows:
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);
});