Javascript 从多个api查询中按顺序返回结果

Javascript 从多个api查询中按顺序返回结果,javascript,Javascript,我想从一个值数组中进行多个API调用。我希望按照API请求接收数据的顺序解析第一个调用,然后解析第二个、第三个,依此类推。我所做的每一件事都会让我在控制台中记录最终数据或解析数据,但不一定返回请求格式的数据数组。下面是我最近使用的解决方案之一。它肯定不起作用(而且有很多问题),但我确实在控制台中看到了未解决的数据。console.logs只显示了某些类型的准确数据作为未解决承诺返回的点 作用 const sendTrackingData = (storeKey, deliveries) =&g

我想从一个值数组中进行多个API调用。我希望按照API请求接收数据的顺序解析第一个调用,然后解析第二个、第三个,依此类推。我所做的每一件事都会让我在控制台中记录最终数据或解析数据,但不一定返回请求格式的数据数组。下面是我最近使用的解决方案之一。它肯定不起作用(而且有很多问题),但我确实在控制台中看到了未解决的数据。
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是正确的,感谢您花时间,我的代码返回了一个承诺,因此最终此解决方案将无法工作,但感谢您的尝试:)