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;
}
我今天在想我是否不能简单地同时支持回调和承诺。您有什么缺点吗?
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;
}