【发布时间】: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