JavaScript для каждого массива внутри обещания - PullRequest
0 голосов
/ 02 июня 2018

В моей функции javascript я могу вызывать службу отдыха внутри обещания.

function update(item) {
  return new Promise(function (resolve, reject) {
    client.get(urls[env] + item['itemId'], function (data, response) {
        try {......

Теперь, когда я изменяю ту же функцию для обработки массива элементов как:

function update(itemList) {
  return new Promise(function (resolve, reject) {
    itemList.forEach((item) =>{
        client.get(urls[env] + item['itemId'], function (data, response) {
            try {

Это не работаетОтдыха по вызову просто не бывает.Это также не дает сбоя.

Что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Если вы просто хотите сделать параллельные запросы и подождать, пока все они завершатся и вернуть результаты, вы можете использовать Promise.all()

const getAll = (items) =>
    Promise.all(items.map(i => callApi(i)))

getAll([1, 2, 3])
    .then(results => console.log(results))
0 голосов
/ 02 июня 2018

Вы можете попытаться написать функцию, которая будет возвращать обещание для client.get вместо обратного вызова.

В следующем коде показано, как это сделать, я использую ES5, но предполагаю, что собственные Promises или полизаполнение:

function promiseClientGet(o, url){
  return new Promise(function(resolve,reject){
    o.get(url, function (data, response) {
      // try {...... need to call resolve or reject
    });
  });
}

function update(itemList) {
  return Promise.all(itemList.map(function(item) {
    return promiseClientGet(urls[env] + item['itemId'], client);
  }))
}

Использование ES6:

const promiseClientGet = (o, url) => new Promise((resolve,reject)=> {
  o.get.apply(o, (data, response) => {
    // try {...... need to call resolve or reject
  });
});

const update = itemList =>
  Promise.all(itemList.map(item => promiseClientGet(urls[env] + item['itemId'], client)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...