昨天閒來無事,因而把以前寫過的promise優化了一下,代碼以下:promise
/*寫文件、追加寫、讀文件*/ var fs = require('fs'); function wrapper(fn,context) { var args = Array.prototype.slice.call(arguments,2); return new Promise((resolve,reject) => { args.push((err,data) => { err ? reject(err) : resolve(data); }); fn.apply(context,args); }); } wrapper(fs.writeFile,fs,'message.txt','word') .then(() => wrapper(fs.appendFile,fs,'message.txt','word')) .then(() => wrapper(fs.readFile,fs,'message.txt','word')) .then(data => console.log(data)) .catch(err => console.log(err)); /*獲取員工id、併發獲取兩個接口信息、讀信息*/ var http = require('http'); var url = require('url'); function delayPromise(ms) { return new Promise((resolve,reject) => { setTimeout(reject, ms); }); } function get(url,ms) { return new Promise.race([ delayPromise(ms), wrapper(request,null,url).then(data => { return JSON.parse(data); }) ]); } get('http://demos.so/result/homework.promise.userInfo') .then( data => { return Promise.all([get('http://demos.so/result/userid=' + args['_id']), get('http://demos.so/result/student=' + args['_id'])]) } .then( data => console.log(data)) .catch( err => console.log(args));