NodeJS承诺与回调:有没有理由不支持两者?

时间:2015-09-06 13:04:01

标签: javascript node.js promise q

我今天想知道我是否不能简单地支持回调和承诺。你能想到的是否有任何缺点?

function fetchUser(data, success, error) {
    var deferred = Q.defer();

    var body = {
        sharedSecret: config['apiSharedSecret'],
        deviceAuth: data.deviceAuth,
        username: data.username,
        phoneNumber: data.phoneNumber
    };

    request.post({
        url: url,
        json: body,
    }, function (err, httpResponse, body) {
        if (err) {
            deferred.reject(new Error(err));
            if (typeof error === "function") {
               error.call(this, err);
            }  
            return;
        }            

        if (typeof success === "function") {
            success.call(this, body);
        }

        deferred.resolve(body);
    });

    return deferred.promise;
}

1 个答案:

答案 0 :(得分:1)

缺点是它可以使您的代码更复杂。此外,没有回调比承诺有任何优势的情况所以没有必要这样做。但是如果你想这样做,你应该写一个这样的函数来避免代码重复。

function defer(success, error) {
  var deferred = Q.defer();
  deferred.promise.then(success, error);
  return deferred;
}