Javascript 如何从promise返回两个结果
我使用fetch从两个不同的api:s获取数据。我需要在同一个函数中使用这两个api数据。一个完成得比另一个快得多,所以为了完成这项工作,我使用了promise.all。但现在我有两个问题Javascript 如何从promise返回两个结果,javascript,promise,Javascript,Promise,我使用fetch从两个不同的api:s获取数据。我需要在同一个函数中使用这两个api数据。一个完成得比另一个快得多,所以为了完成这项工作,我使用了promise.all。但现在我有两个问题 如何将2个结果(test1和test2)返回给下一个承诺?现在,我的代码停止并说“test1未定义” 如果我使用promise.all,然后在每个文件上运行.json(如下面的代码),那么代码会在返回结果之前等待每个json完成吗?或者一个人不能完成 代码: 您可以返回一个承诺。在中对两个.json调用的所有
您可以返回一个
承诺。在中对两个.json
调用的所有。然后:
Promise.all([fetch1, fetch2])
.then((file) => {
let test1 = file[0].json()
let test2 = file[1].json()
return Promise.all([test1, test2])
}).then(([test1, test2]) => {
console.log(test1)
console.log(test2)
})
但是最好将fetch
请求和.map
请求映射到它们的.json()
承诺,然后调用Promise。结果中的所有:
const getApi = url => fetch(url).then(res => res.json());
Promise.all([
getApi('url1'),
getApi('url2')
])
.then(([test1, test2]) => {
// do stuff with test1 and test2
})
.catch((err) => {
// handle errors
});
上述代码将导致并行处理请求;两个请求都不会阻止另一个请求继续。相反,您的(经过调整的)原始代码将要求在两个请求的.json()
(处理正文)启动之前接收和处理两个请求的响应头。将每个结果推送到一个数组中?
const getApi = url => fetch(url).then(res => res.json());
Promise.all([
getApi('url1'),
getApi('url2')
])
.then(([test1, test2]) => {
// do stuff with test1 and test2
})
.catch((err) => {
// handle errors
});