【问题标题】:add timeout between get request in a array of promises在一系列承诺中的获取请求之间添加超时
【发布时间】:2019-11-19 21:44:16
【问题描述】:

干草 我向 api 发出大量请求,我需要控制请求流

我有使用 axios 发出请求并返回承诺的功能,我将数组变为 true 并发出请求,然后我使用 Promise.all() 完成请求,没有任何延迟和控制,我可以放一些控制函数来限制请求发送到api之前

我的功能:

        return new Promise((resolve, reject) => {
            console.log(`Getting address for ${lat}, ${lng}...`);
            // Make sure we pass lat,lng to the API.
            axios.get(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&result_type=locality&result_type=administrative_area_level_1&result_type=country&key=${apiKey}`)
                .then(response => {
                    return resolve(response)
                })
                .catch(error => {
                    return reject(error.message)
                }).catch(reject => {
                    return reject
                })
        })
    }

然后我将数组变为 true 并使用 get func

const newData = data.map(async item => {
        let results = ''
        let reqStatus = ''
        if (item.Longitude !== "blank") {
            const req = await getAddress(item.Longitude, item.Latitude).catch((error) => {
                console.log(error);
            });
            reqStatus = req.status
            results = req.data
        } else {
            results = 'blank'
        }
        let newItem = ''
        //console.log(JSON.stringify(results, null, 2))
        console.log(`status: ${reqStatus} ${results.status}`)
        if (reqStatus == '200' && results.status == 'OK') {
            const rstlength = results.results[0].address_components.length
            newItem = {
                ...item,
                //results_from_google: results,  //results.results[0].address_components[0].long_name
                address_1: rstlength > 0 ? results.results[0].address_components[0].long_name : 'blank',
                address_2: rstlength > 1 ? results.results[0].address_components[1].long_name : 'blank',
                address_3: rstlength > 2 ? results.results[0].address_components[2].long_name : 'blank',
                address_4: rstlength - 1 > 3 ? results.results[0].address_components[3].long_name : 'blank'
            }

        } else {
            newItem = {
                ...item,
                //results_from_google: results,  //results.results[0].address_components[0].long_name
                address_1: 'blank',
                address_2: 'blank',
                address_3: 'blank',
                address_4: 'blank'
            }
        }

        return newItem;
    })

现在我该如何延迟请求?

【问题讨论】:

标签: javascript async-await timeout axios es6-promise


【解决方案1】:

您可以尝试: https://www.npmjs.com/package/bottleneck

const limiter = new Bottleneck({
  minTime: 333
});

limiter.schedule(() => myFunction(arg1, arg2))
.then((result) => {
  /* handle result */
});

【讨论】:

    猜你喜欢
    • 2018-03-18
    • 1970-01-01
    • 2018-08-11
    • 2018-11-09
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多