首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >承诺链在其最后的承诺解决之前就解决了。

承诺链在其最后的承诺解决之前就解决了。
EN

Stack Overflow用户
提问于 2017-11-23 00:27:44
回答 2查看 178关注 0票数 0

背景

从两个几乎相同的javascripts开始,然后将其重构为3:一个包含以前冗余代码+2个调用脚本的实用脚本。

问题

这两个原始脚本使用(when.then)并正常工作。3脚本场景失败,因为下一个承诺从一个调用脚本解决早期问题。

详细信息

第一个脚本称为“多”,它使用一系列延迟来循环一系列ajax请求,然后在浏览器中刷新“多”页面。所以:

auth -> user -> loop (updateIssue -> transition) end loop -> refresh

第二,“单”在没有循环的情况下有效地使用相同的代码,然后使用不同的refresh函数。

我的目标是在实用程序脚本中将代码重构为一个承诺链,并使用如下所示:

代码语言:javascript
运行
复制
// 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。任何你能提供的洞察力将是最有帮助的。

EN

回答 2

Stack Overflow用户

发布于 2017-11-23 00:32:08

Promise.all调用总是在更新后但在转换之前解析。

唯一可能发生的方法是,如果事件链中的某些事情没有正确地链接承诺。您必须向我们展示真正的代码,以帮助您识别特定的问题,但是如果Promise.all()没有等待transition承诺,那么这个承诺就不能正确地链接到Promise.all()正在等待的承诺数组中。

具体来说,我们需要看到伪代码的这一部分背后的代码:

代码语言:javascript
运行
复制
array of update.then(transition) promises

要确切地了解transition()是如何参与创建这一系列承诺的。与往常一样,如果您向我们展示的是真正的代码,而不仅仅是伪代码,我们可以帮助我们在编程逻辑中找到实际错误的来源。

票数 0
EN

Stack Overflow用户

发布于 2017-11-23 02:45:20

一个可能的情况是,您使用的是JQuery < version 3,而对authPromise()的调用将返回一个JQuery承诺。这意味着thenUtility.promiseChain返回的承诺链中返回的所有承诺都是JQuery承诺。上一次我检查时,较早版本的JQuery不将外部库承诺(包括本机诺言构造函数返回的承诺)视为承诺,将履行--一个JQuery承诺--无需等待解决即可解决。

中的Promise.all返回的允诺对象

代码语言:javascript
运行
复制
.then(function() { return Promise.all( // ...

正在被用来履行then的承诺,而不等待它得到解决。

简而言之,您无法用JQuery承诺解决旧版本的ES6承诺,并产生用承诺解决承诺的效果。

可能的解决办法:

  1. 升级到JQuery 3(你失去了对IE旧版本的支持,但这些版本都不支持Promise )。如果你能做到的话。
  2. 将所有承诺使用转换为ES6样式承诺,并通过调用Promise.resolve( jqPromise)将正在传递的所有JQuery承诺转换为ES6承诺
  3. 将等效的Promise.resolve反向写入,将ES6承诺转换为JQuery承诺。我认为这是可能的,但一个巨大的倒退错误的方向。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47445821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档