In node.js q.js is used to realize the promise of API
- 2020-03-30 03:58:11
- OfStack
About what is the promise and promise to solve is what problem, please let us experience the callback asynchronous node coding solution, helping to set (link: http://wiki.commonjs.org/wiki/Promises/A) to see is defined at first sight, go here.
Here's how to implement the promise of the node API using q.js.
1. Everything starts with install
npm install q
Ii. Promising method of standard node style API
1. Use q.nfcall
Compared with q.fcall, q.nfcall is the q.fcall of node.
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.docodeify
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
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()
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);
});