2017-02-13 4 views
0

У меня есть приложение-приложение, взаимодействующее с мастером сброса REST API. В моем коде я заметил следующую нечетную ошибку.Сбой с node.js обещает копирование значений

В попытке установить значения двух переменных и затем использовать их, чтобы установить состояние, я имел следующий

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(), как я мог выполнить задачу, которую я хочу сделать?

+1

пропущенная версия вашего кода работает просто отлично - https://jsfiddle.net/pjh7djx8/ - возможно, ваша функция 'LoginTransport.getAllUsers' сломана каким-то образом, когда ее запуск дважды концептуально« в то же время »прерывается это –

+3

Поведение, которое вы описываете, не должно происходить. Вы должны проверить, имеет ли 'LoginTransport.getAllUsers' некоторый побочный эффект, который заставляет его возвращать одно и то же значение, если оно вызывается быстро. Вы можете проверить это следующим образом: 'const p1 = LoginTransport.getAllUsers ('Ownerory Owner'); const p2 = LoginTransport.getAllUsers ('Продавец'); const inventorRes = ожидание p1; const sellerRes = wait p2; ' – JLRishe

ответ

1

Теперь я заметил, что при этом оба изобретателя res и sellerRes будут установлены в значение LoginTransport.getAllUsers('Inventory Owner') в отличие от соответствующих аргументов.

Это будет ошибка LoginTransport.getAllUsers. Promise.all does, что вы ожидаете от этого.

+0

Я вижу giong, чтобы посмотреть на него – frogeyedpeas