Promise.then() 在 promise 解决之前执行

Posted

技术标签:

【中文标题】Promise.then() 在 promise 解决之前执行【英文标题】:Promise.then() executing before the promise is resolved 【发布时间】:2018-05-22 17:05:10 【问题描述】:

我对 Promise 有疑问。我有这个代码:

let line = hey.fetchBans().then(() => 
  myStuff();
  console.log(line);
);

问题是myStuff()fetchBans() 解决之前执行。我试图看看这是否是记录line 的真正问题,它会打印Promise <pending>

我做错了什么?

【问题讨论】:

请提供有关 hey.fetchBeans 功能的更多信息 - 即它的源代码 “问题是 myStuff() 在 fetchBans() 解决之前执行” 如果我们假设 fetchBeans 返回您所说的承诺,则不是上面的代码直到myStuff 运行后才解决。请使用 minimal reproducible example 来更新您的问题,以展示问题,最好是使用 Stack Snippets([<>] 工具栏按钮;here's how to do one)可运行 我猜 Promise-status 会在 回调被调用之后更新。您应该将您的预期值作为回调的参数。 【参考方案1】:

line 不是hey.fetchBans() 返回的承诺(并且在调用回调之前确实完成了),而是.then(…) 返回的承诺(并且将使用回调的结果值解决) .它总是在那个回调中等待处理。

【讨论】:

非常感谢,我完全忘记了所有 Promise 的东西-_-'

以上是关于Promise.then() 在 promise 解决之前执行的主要内容,如果未能解决你的问题,请参考以下文章

09 promise then

在 promise.then 或 promise.catch 中调用时,Array.push 的工作很奇怪

如果使用 then ,是不是需要在 promise 中嵌套 catch?

如何对 AngularJS $promise.then 进行单元测试

使用类方法作为回调时的 Promise.then 执行上下文

为啥在 React 组件中调用了两次 Promise.then 而不是 console.log?