var q = require("q"); function Q(outerFunc) { return function () { // 避免上下文丢失 var context = this; var args = []; for (var i in arguments) { args.push(arguments[i]); } var deferred = q.defer(); args.push(function () { if (arguments[0] != null) { deferred.reject(arguments[0]); } else { var returnedData = []; // (null, value1, value2,...).回调函数里如果返回多个data,先处理成数组 for (var i in arguments) { if (i == 0) continue; returnedData.push(arguments[i]); } // 将数组dereference deferred.resolve.apply(null, returnedData) } }); outerFunc.apply(context, args); return deferred.promise; } } var fs = require("fs"); qFs = Q(fs.readFile); qFs("../package.json") .then(function (data) { console.log(data); }) .catch(function (error) { console.log(error); });
将回调函数转换成promise(粗糙版)
最新推荐文章于 2024-06-29 09:30:43 发布