Как запустить Promise по одному внутри forEach [дубликат]

if (isSet($_SESSION['started'])){
    if((mktime() - $_SESSION['started'] - 60*30) > 0){
        //Logout, destroy session, etc.
    }
}
else {
    $_SESSION['started'] = mktime();
}
0
задан Brian Ivander T. P. 28 February 2019 в 05:54
поделиться

2 ответа

Вы не можете использовать forEach для этого (по крайней мере, не без доступа к внешней переменной) - если вы хотите использовать метод массива, используйте вместо этого reduce и передавайте текущий Promise в качестве аккумулятора каждый время:

var array1 = ['a', 'b', 'c'];
array1.reduce((a, str) => (
  a.then(promise)
    .then(() => {
      console.log(str);
    })
), Promise.resolve());

function promise() {
  return new Promise((resolve, reject) => {
    console.log('test');
    resolve()
  })
}

Или, если вы хотите сделать код проще для чтения, используйте await внутри [115 ] цикл:

var array1 = ['a', 'b', 'c'];
(async () => {
  for (const str of array1) {
    await promise();
    console.log(str);
  }
})();


function promise() {
  return new Promise((resolve, reject) => {
    console.log('test');
    resolve()
  })
}

0
ответ дан CertainPerformance 28 February 2019 в 05:54
поделиться

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

var array1 = ['a', 'b', 'c'];
array1.forEach(function(element) {
  promise().then((result) =>  {
    
    console.log(result);
    console.log(element);
  })
});

function promise() {
  return new Promise((resolve, reject) => {
    resolve('test')
  })
}

0
ответ дан Kaushik 28 February 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: