Вы не ожидали обещаний, которые вернет res.json()
. Вы можете добавить еще Promise.all()
к результату вашего .map()
или можете просто вставить их в первоначальное обещание, которое вы используете Promise.all()
. Последнее - моя рекомендация:
function fetchJSON(...args) {
return fetch(...args).then(response => {
if (!response.ok) {
throw new Error(`Error ${response.status}`);
}
return response.json();
});
}
getData: function() {
Promise.all([
fetchJSON('@Url.Action("GetSomething")', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(this.selectedValues)
}),
fetchJSON('@Url.Action("GetSomethingElse")', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(this.selectedValues)
})
]).then(responseArray => {
console.log("LOG: ", responseArray);
// use responseArray here
}).catch(error => {
console.log(error);
});
},
К вашему сведению, я регулярно нахожу, что получение ответов с использованием fetch()
неоправданно многословно и, таким образом, заканчивается использованием некоторой вспомогательной функции, такой как fetchJSON()
, которую я использовал здесь чтобы не повторять код.
На мой взгляд, интерфейс fetch()
должен был предложить две вещи.
- Опция, позволяющая вам сказать, что вы этого хотели отклонить, если не статус 2xx. Я понимаю вариант использования для не всегда отклонения в этом случае, но, вероятно, есть и другие варианты использования, в которых вы хотите, чтобы он отклонил, поэтому это должен был быть вариант.
- Параметр, чтобы сказать ему прочитать ответ и вернитесь в виде текста, json или другого типа, чтобы вам не пришлось делать еще одно обещание, возвращающее вызов функции, чтобы сделать это.
FYI, модуль request-promise
для nodejs , имеет обе эти опции (потому что они регулярно нужны).
Но, поскольку у них нет этих опций (хотя они регулярно нужны), нам иногда приходится переносить их, чтобы добавить эти опции, чтобы избежать повторения код. В этом случае вы хотите, чтобы он отклонял, если не статус 2xx, и вы хотите, чтобы он считывал и анализировал JSON, и вы хотите сделать это в двух местах, поэтому мы делаем небольшую служебную функцию, которая делает именно это.