Как дождаться окончания всех Promise.all (), а затем продолжить с результатами - PullRequest
0 голосов
/ 15 октября 2019

Я знаю, что этот вопрос задается не впервые, но я пытался работать с другими ответами , но мой код не работает должным образом. У меня есть Promise.all , где у меня есть несколько выборок. Результат извлечения я превращаю в json, а затем в goon. Когда все будет сделано, он должен напечатать «готово» и, конечно, еще больше кода. Однако, что происходит, это то, что «готово» печатается сразу, а затем один за другим появляются результаты выборок.

Вот мой код:

  Promise.all(selectedTypes.map((type) => {
    let body = {
      selectedScreenshot: type,
      dataUrl: dataUrl
    };
    fetch(URL, {
      method: 'POST',
      body: JSON.stringify(body),
      credentials: 'same-origin',
    })
    .then(resp => {
      console.log(resp.json()); //  this is done one by one as the results come in
      console.log('next');
    })
    }
  )).then(text => {
    console.log('done'); // this should be printed last, is printed first
  })

Что яделать неправильно?

1 Ответ

1 голос
/ 15 октября 2019

Вам необходимо вернуть fetch и вернуть некоторый результат в fetch().then(), а вот некоторая полезная информация и примеры для Promise.all

selectedTypes = ["https://jsonplaceholder.typicode.com/todos/1", "https://jsonplaceholder.typicode.com/todos/2"]; // My example
Promise.all(selectedTypes.map((type) => {
    let body = {
        //selectedScreenshot: type,
        //dataUrl: dataUrl
    };
    var URL = type;
    //You need to return the fetch
    return fetch(URL, {
        // method: 'POST',
        // body: JSON.stringify(body),
    }).then((resp) => resp.json()) // Transform the data into json
            .then(function (data) {
                console.log(data); //  this is done one by one as the results come in
                console.log('next');
                // you need to return the data
                return data;
            });
}
)).then(text => {
    text.forEach(function (item) {
        console.log('FROM PROMISE ALL');
        console.log(item);
    });
    console.log('done'); // this should be printed last, is printed first
});

Я добавил несколько ссылок json только для примера и прокомментировал все, что не объявлено в вашем вопросе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...