Javascript承诺动态回调
我正在读这篇关于承诺的文章,他在文章中提到了以下几点 “如果承诺成功或失败,并且您稍后添加了成功/失败回调,则将调用正确的回调,即使事件发生在更早的时间” 我不清楚这一点。我在这里的问题是,如果一个承诺已经成功,并且后来我添加了一个回调,那么即使事件发生得更早,这个回调如何执行呢 请解释一下 谢谢Javascript承诺动态回调,javascript,promise,Javascript,Promise,我正在读这篇关于承诺的文章,他在文章中提到了以下几点 “如果承诺成功或失败,并且您稍后添加了成功/失败回调,则将调用正确的回调,即使事件发生在更早的时间” 我不清楚这一点。我在这里的问题是,如果一个承诺已经成功,并且后来我添加了一个回调,那么即使事件发生得更早,这个回调如何执行呢 请解释一下 谢谢 Sahiti如果我正确理解了您的问题,这基本上意味着您可以运行承诺,并在运行后设置回调 在面向事件的编程中,必须首先设置事件回调,否则如果触发,它将永远无法执行正确的回调 使用承诺,您可以运行承诺so
Sahiti如果我正确理解了您的问题,这基本上意味着您可以运行承诺,并在运行后设置回调 在面向事件的编程中,必须首先设置事件回调,否则如果触发,它将永远无法执行正确的回调
使用承诺,您可以运行承诺
someFunc()
,然后添加回调,而不管承诺在运行时何时实现。承诺知道它是已解决还是已被拒绝。因此,如果您将另一个事件处理程序附加到它,它将适当地调用它
例如:
function myFunc(){ return Promise.resolve();}
var myPromise = myFunc();
myPromise.then(function(){console.log('I resolved.');});
myPromise.then(function(){console.log('Me too!');});
将导致:
我下定决心。
我也是 当您对一个承诺调用.then()
时,它有三种可能的操作之一,这取决于该承诺是否已解决、被拒绝或仍处于挂起状态
.then()
处理程序排队,以便在承诺实际解析或拒绝时供以后使用Promise.prototype.then = function(resolveHandler, rejectHandler) {
var self = this;
if (this._promiseState === "pending") {
// promise is not yet resolved or rejected so
// just queue the .then handlers for later use
this._handlers.push({resolve: resolvehandler, reject: rejectHandler});
} else if (this._promiseState === "resolved") {
// already resolved, schedule the resolve handler to run
// immediately after stack unwinds
if (resolveHandler) {
setImmediate(function() {
var p = resolveHandler(self._resolvedValue);
// further processing
});
}
} else {
// already rejected, schedule the reject handler to run
// immediately after stack unwindws
if (rejectHandler) {
setImmediate(function() {
var p = rejectHandler(self._rejectReason);
// further processing
});
}
}
// more code here that eventually returns a new promise
}
你能修好这个链接吗?它抛出了一个404 Not Found错误。当你添加回调时,如果承诺已经解决,它会立即自动添加到回调队列中,你是在谈论这个链接吗。有什么需要解释的吗?任何示例代码都会非常有用…因为在承诺完成后,我如何设置回调resolved@user3519495,与未解决问题时的设置方式相同。您是否知道
Promise.resolve()
返回已解析的承诺?所以Promise.resolve()。然后(()=>console.log(“hi”)
正在执行您要求的操作。稍后如何添加回调
?任何示例代码都将非常有用!如果我在setTimeout
中添加resolve
处理程序,但承诺提前兑现,会发生什么?@KevinB,没人!但当我读到这个问题的时候,我的脑海里就出现了这个问题。我希望你不介意回答这个问题。。可以帮助别人……)考虑在事件触发后添加事件侦听器,如果事件不被再次触发,则不会再次调用此事件侦听器。如果要解决的一个动作在它被解析之后被设置,则它将执行。将此事件与事件侦听器进行比较,如果事件已经被触发,事件侦听器将永远不会被调用。这就是我得到的事件与承诺之间的区别。。。在上面的例子中,因为myFunc已经被解析,但是一个动作在以后被设置,所以它显示为:“我也解析了我”…我的理解正确吗