【问题标题】:Glitch with node.js promises copying valuesnode.js 的故障承诺复制值
【发布时间】:2017-02-13 13:46:09
【问题描述】:

我有一个与放置向导 REST API 交互的反应应用程序。在我的代码中,我注意到以下奇怪的错误。

在尝试设置两个变量的值然后使用它们来设置状态时,我有以下内容

const [inventorRes, sellerRes] =
await Promise.all([
    LoginTransport.getAllUsers('Inventory Owner'),
    LoginTransport.getAllUsers('Seller'),
]);

其中 LoginTransport 是一种调用外部 API 的方法。现在我注意到,在这样做时,发明者 res 和 SellerRes 都将设置为 LoginTransport.getAllUsers('Inventory Owner') 的值,而不是各自的参数。

当我把它分解成:

const inventorRes = await LoginTransport.getAllUsers('Inventory Owner');
const sellerRes = await LoginTransport.getAllUsers('Seller');

行为是正确的。

我的理解来自:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all 是 Promise.all 返回了一个可迭代对象。 javascript是否会尝试将左侧可迭代的值与右手匹配?假设这是真的,但我坚持使用 Promise.all() 我怎么能完成我想做的任务?

【问题讨论】:

  • 你的代码的简化版本运行得很好 - jsfiddle.net/pjh7djx8 - 也许你的 LoginTransport.getAllUsers 函数在某种程度上被破坏了,在概念上“同时”运行两次会破坏它
  • 您所描述的行为不应该发生。您应该检查LoginTransport.getAllUsers 是否有一些副作用,如果它被快速连续调用,它会导致它返回相同的值。你可以这样检查:const p1 = LoginTransport.getAllUsers('Inventory Owner'); const p2 = LoginTransport.getAllUsers('Seller'); const inventorRes = await p1; const sellerRes = await p2;

标签: javascript node.js asynchronous promise async-await


【解决方案1】:

现在我注意到,在执行此操作时,发明者 res 和 SellerRes 都将设置为 LoginTransport.getAllUsers('Inventory Owner') 的值,而不是各自的参数。

那将是LoginTransport.getAllUsers 的错。 Promise.all does 你期望它做什么。

【讨论】:

  • 我看到 giong 去调查一下
猜你喜欢
  • 2021-01-11
  • 2018-12-09
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 2017-05-17
  • 2015-04-15
  • 1970-01-01
相关资源
最近更新 更多