Javascript 从多个api查询中按顺序返回结果
我想从一个值数组中进行多个API调用。我希望按照API请求接收数据的顺序解析第一个调用,然后解析第二个、第三个,依此类推。我所做的每一件事都会让我在控制台中记录最终数据或解析数据,但不一定返回请求格式的数据数组。下面是我最近使用的解决方案之一。它肯定不起作用(而且有很多问题),但我确实在控制台中看到了未解决的数据。Javascript 从多个api查询中按顺序返回结果,javascript,Javascript,我想从一个值数组中进行多个API调用。我希望按照API请求接收数据的顺序解析第一个调用,然后解析第二个、第三个,依此类推。我所做的每一件事都会让我在控制台中记录最终数据或解析数据,但不一定返回请求格式的数据数组。下面是我最近使用的解决方案之一。它肯定不起作用(而且有很多问题),但我确实在控制台中看到了未解决的数据。console.logs只显示了某些类型的准确数据作为未解决承诺返回的点 作用 const sendTrackingData = (storeKey, deliveries) =&g
console.logs
只显示了某些类型的准确数据作为未解决承诺返回的点
作用
const sendTrackingData = (storeKey, deliveries) => {
const trackingUrl = deliveries.map(async (delivery) => {
const urlData = []
delivery.parcels.map(async (parcel) => {
const {trackingData} = parcel;
const carrier = trackingData.carrier.toLowerCase();
const trackingCode = trackingData.trackingId;
urlData.push(await getTrackingUrl(storeKey, carrier, trackingCode))
})
console.log(urlData)
return urlData
})
return Promise.all(trackingUrl)
};
它现在在这里被称为使用效果
const test = await sendTrackingData(storeKey, deliveries)
console.log(test,'the test url data =========>')
API调用
export const getTrackingUrl = (storeKey, carrier, trackingCode) => {
return axios.post(`random-url-address/returnedData`, {
storeKey,
carrier,
trackingCode,
});
};
您需要调用
Promise.main异步请求上的所有
,getTrackingUrl
,以便保留订单:
const sendTrackingData = (storeKey, deliveries) => (
Promise.all(deliveries.map((delivery) => (
Promise.all(delivery.parcels.map((parcel) => {
const { trackingData } = parcel;
const carrier = trackingData.carrier.toLowerCase();
const trackingCode = trackingData.trackingId;
return getTrackingUrl(storeKey, carrier, trackingCode);
}))
)))
);
当您想要保持秩序时,在异步请求后推送几乎从来都不是正确的方法。您可以尝试
delivery.parcels.map(异步(包裹,索引)=>{
const{trackingData}=地块;
const carrier=trackingData.carrier.toLowerCase();
const trackingCode=trackingData.trackingId;
拼接(索引,0,等待getTrackingUrl(存储键,载波,跟踪码));
})
console.log(urlData)
return urlData
我不喜欢。push
很难看,不能做这项工作。在异步请求上调用Prmise.all是正确的,感谢您花时间,我的代码返回了一个承诺,因此最终此解决方案将无法工作,但感谢您的尝试:)