Невозможно получить доступ к элементам массива вне цикла for - PullRequest
0 голосов
/ 09 мая 2020

Проблема:

  • Когда я пытаюсь логировать в консоль массив внутри l oop, он показывает мне, что результат был добавлен в массив. Однако за пределами l oop я получаю пустой массив в console.log
var ResultArray01=  [];
for(var gg=0; gg<ResultArray.length;gg++)   // ResultArray is come from another function
{
  IPFS.get.call(ResultArray[gg],function(error, result) {      //this function is about smart contract
  if (error) 
  {
    console.log(error);
  }
  else
  {
    ResultArray01[gg] = result;    //get the result, and store it into ResultArray01
    console.log(ResultArray01[gg]);    //it can successfully print the value
  }
  });

}
console.log(ResultArray01);    //returns empty array

Кто-нибудь может мне помочь? спасибо

1 Ответ

0 голосов
/ 09 мая 2020

Как указано в комментарии @ jfriend00. Ваш console.log() перед выполнением обратного вызова. Вы можете использовать здесь promises для обработки такого сценария. Так можно добиться желаемого результата.

var ResultArray01 = [];
var promises = [];
for (var gg = 0; gg < ResultArray.length; gg++) {
  promises.push(
    new Promise((resolve, reject) => {
      IPFS.get.call(ResultArray[gg], function (error, result) {
        if (error) {
          console.log(error);
          // reject promise in case there is any error.
          reject(error)
        } else {
          //get the result, and store it into ResultArray01
          ResultArray01[gg] = result;
          // it can successfully print the value
          console.log(ResultArray01[gg]); 
          // resolve if everything is as expected.
          resolve();
        }
      })
    }) 
  );
}
Promise.all(promises).then(() => {
  console.log(ResultArray01); // it should print the desired result now.
}).catch((err) => console.log(err))
...