【发布时间】:2014-08-08 03:47:57
【问题描述】:
在使用 javascript 异步错误捕获机制时,我最终问自己,使用 Promise 与使用回调有什么区别,而且事实上 Promise 可能更具糖语法。
例如,让我们考虑
function setPromise() {
var message = "awesome";
var deferred = new $.Deferred();
setTimeout(function(){deferred.resolve(message)},3000);
return deferred.promise();
}
var promise = setPromise();
promise.done(function (message) {
console.log("promise done with message : " + message);
});
和
function setCallback(doneCallback) {
var message = "awesome";
setTimeout(function(){doneCallback(message)},3000);
}
setCallback(callback)
function callback(message) {
console.log("callback done with message : " + message);
}
两者都充当闭包,都允许返回参数等。
那么有什么区别呢?
【问题讨论】:
-
Promise 在自己的实现中使用回调,但也支持更多功能,例如处理程序链接、用于异步完成/错误通知的标准化接口等。这有点像在说函数和 OOP 之间有什么区别,一个是低级构造 - 另一个是使用相同低级构造的更强大的机制,但也支持更多的功能和可扩展性。当您有多个需要排序或协调的异步操作时,promise 的真正威力就出现了。
标签: javascript callback promise