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

NodeJS promises vs. callbacks: is there a reason not to support both?

我今天在想我是否不能简单地同时支持回调和承诺。您有什么缺点吗?

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;
}

缺点是它会使您的代码更加复杂。此外,在任何情况下回调都不会比承诺有任何优势,因此这样做没有意义。但是如果你想这样做,你可能应该写一个这样的函数来避免代码重复。

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