【发布时间】:2017-11-23 00:27:44
【问题描述】:
背景
从 2 个几乎相同的 javascript 开始,然后重构为 3 个:一个包含以前冗余代码的实用程序脚本 + 2 个调用脚本。
问题
两个原始脚本使用 jquery Deferreds (when.then) 并且工作正常。 3 脚本方案失败,因为倒数第二个 promise 提前解决来自一个调用脚本。
详情
第一个脚本,称为“multi”,使用一系列 deferreds 循环一系列 ajax 请求,然后刷新浏览器中的“multi”页面。所以:
auth -> user -> loop (updateIssue -> transition) end loop -> refresh
第二个,“single”有效地使用相同的代码,没有循环,然后使用不同的refresh函数
我的目标是将代码重构为实用程序脚本中的承诺链,并像这样使用:
// calling script
Utility.promiseChain().done(refresh())
// utility script
Utility.promiseChain = function() {
return authPromise()
.then(function() { return userPromise();} )
.then(function() { return Promise.all(array of update.then(transition) promises);})}
更具体的问题
Promise.all 调用总是在 update 之后、transition 之前解析,导致 refresh 提前触发,然后是 transition。您可以提供的任何见解都将是最有帮助的。
【问题讨论】:
-
能否请您显示创建
update.then(transition)承诺数组的代码,transitiononFullfilled 处理程序的作用以及您使用的 JQuery 版本 - 版本 1 和 2 不符合承诺标准并且在准确处理原生 Promise 方面存在问题。 -
另外,除了版本之外,
authPromise和userPromise返回的promise是什么样的,ES6还是JQuery?
标签: javascript jquery promise