Javascript 未分配的承诺及其关联的处理程序存储在哪里
对Promise构造函数的调用返回一个Promise对象,我们称之为originalpromise。originalpromise的状态为:挂起,值为:未定义 在第1行中,我们立即调用originalpromise对象上的then方法,该方法返回一个全新的promise对象——我们称之为nextpromise。nextpromise的状态为“挂起”,值为“未定义” 当1000ms后调用RunOnItemCompletion时,resolve runs-将originalpromise状态更新为resolved,将originalpromise值更新为Timer complete 在这一点上,onpermission被执行-onpermission-并返回Timer complete。我们的nextpromise现在的状态为:已解决,值为:计时器完成 三个问题: 原始PROMISE解析时调用的OnPerformance函数存储在哪里? originalpromise和nextpromise存储在哪里?因为它们没有分配给任何对象。 与之相关的2-OnPerformance如何知道执行原始Promise解决方案。它是由originalpromise引用的还是originalpromise的解决方案指示下一步的解决方案 而这正是执行任务的初衷Javascript 未分配的承诺及其关联的处理程序存储在哪里,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,对Promise构造函数的调用返回一个Promise对象,我们称之为originalpromise。originalpromise的状态为:挂起,值为:未定义 在第1行中,我们立即调用originalpromise对象上的then方法,该方法返回一个全新的promise对象——我们称之为nextpromise。nextpromise的状态为“挂起”,值为“未定义” 当1000ms后调用RunOnItemCompletion时,resolve runs-将originalpromise状态更新为r
的确,您没有新Promise的直接引用变量,但是您不需要声明变量来对其进行操作。例如,它就像 document.querySelector'div'.addEventListener 对所选div的引用不会保存在变量中,但仍可以在同一行上对对象进行操作 但是,nextpromise引用确实丢失了:您基本上是声明它的 新的承诺执行人。不履行; 不要把它分配给任何东西,这样以后就没有办法得到它了。承诺对象仍然存在,只是无法引用 原始PROMISE解析时调用的OnPerformance函数存储在哪里 它存储在promise的实例数据中,promise的.then处理程序被调用。当承诺得到解决时,它将按照注册顺序调用每个.then处理程序 originalpromise和nextpromise存储在哪里?因为它们没有分配给任何对象 在您的代码中,原始承诺并没有存储在特定的任何地方。它不会立即被垃圾收集,因为由于setTimeout,executor作用域仍然处于活动状态,并且仍然可以由活动代码调用的resolve实现引用了原始承诺 与之相关的2-OnPerformance如何知道执行原始Promise解决方案。它是由originalpromise引用的,还是originalpromise的决议指示nextpromise其已解决,而这正是开始执行OnCompletion的原因
传递给executor函数的resolve引用了它所涉及的承诺。谢谢您的回答。originalpromise的实例数据是什么?例如,我认为不可能在chrome开发工具中查看它?附加问题:resolve函数如何表示对originalpromise的引用[是否有规范/文档我可以看到resolve的工作方式-当我console.log它是本机代码时-我可以查看吗?]@javascriptttt-Promise实例数据是私有的。您不能直接查看它。@javascriptttt-有几种不同的解决方法。它甚至可以通过闭包或绑定在纯Javascript中实现。如果您真的想查看Javascript实现,请参阅。您还可以查看,看看他们是如何在本机代码中实现的。感谢这些-非常有用。我仍然不清楚oncompletion与originalpromise和nextpromise之间的联系机制。它附加到某个地方的originalpromise实例,但这是私有的,在调用resolve后立即调用。然后将onCompletion的返回值指定给nextpromise值。您是否了解OnPerformance的定义与originalpromise的关联,以及其返回值与nextpromise的关联?谢谢:
new Promise(executor).then(onFulfilment);
function executor (resolve, reject) {
function runOnTimerCompletion(){
resolve("Timer complete")
}
setTimeout(runOnTimerCompletion, 1000);
}
function onFulfilment(input){
console.log(input)
return input
}