1

順番に行う必要がある一連のリクエストがありますAxios

let {files} = this.state, requestQueue = [];
files.forEach(file => requestQueue.push(makeRequest(file.name)));
requestQueue.reduce((curr, next) => {
  return curr.then(next);
}, Promise.resolve()).then((res) => console.log(res));

関数makeRequestは以下の通りです

import Axios from 'axios';

let axiosCustom = Axios.create({
  baseUrl: 'localhost:8080',
  headers: {
    Accept: 'application/json'
  }
});

const makeRequest = (title) => {
  return axiosCustom({
    url: '/api',
    method: 'PUT',
    params: {
      title
    }
  });
};

応答は、最初に解決されたものです。これを修正するにはどうすればよいですか?

4

2 に答える 2

0

私の理解で.then()は、実行するには関数が必要です。その動作は、その関数の戻り値に応じて変わります (その場合thenable)。

.thenしたがって、reduce を変更して、以下を返すメソッドを提供する必要がありますnext

let {files} = this.state,
    requestQueue = files.map(file => makeRequest(file.name));

requestQueue.reduce((curr, next) => {
  return curr.then(() => next); // <- here
}, Promise.resolve())
    .then((res) => console.log(res));

または

requestQueue.reduce((curr, next) => curr.then(() => next), Promise.resolve())
    .then((res) => console.log(res));
于 2016-08-03T08:04:00.630 に答える