【发布时间】:2015-09-06 21:12:49
【问题描述】:
我今天想知道我是否不能简单地同时支持回调和承诺。你能想到什么缺点吗?
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;
}
【问题讨论】:
-
教育您的用户接受承诺 :-) 不再需要回调参数。
-
请记住,promise 也是回调,但它们比普通回调有更多的特性和功能,特别是在异步错误传播和管理多个异步操作时。所以,你的问题实际上更像是,当功能更多的回调现在被认为是一种标准时,为什么要支持功能更少的回调形式?
标签: javascript node.js promise q