리셋 함수를promise로 변환 (거친 버전)

4636 단어
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);
    });

좋은 웹페이지 즐겨찾기