Monday, 22 May 2017

async.queue within a promise chain?

I am trying to create an async queue for an array of get requests to an api, i am just unsure how to combine and use the responses. Maybe my implementation is wrong since i am using async.queue inside a promise then function ?

Ultimately i would like to get results from first promise ->

use results of that first promise to create an array of get requests for the async.queue ->

then combine the results of all the get responses

const rp = require("request-promise");
app.get("/", (req,res) => {
    let arr = []
    rp.get(url)
    .then((response) => {
        let arrayID = response
        let q = async.queue((task, callback) => {
            request({
                method: "GET",
                url: url,
                qs: {
                    id: task.id
                }
            }, (error, response, body) => {
                arr.push(body)
                console.log(arr.length)
                // successfully gives me the response i want. im trying to push into an array with all of my responses,
                // but when i go to next then chain it is gone or if i try to return arr i get an empty []
            })
            callback()
        }, 3)
        for(var i = 0; i < arrayID.length; i++){
           q.push({ id : arrayID[i]} );
        }
        q.drain = function() {
            console.log('all items have been processed');
        }
        return arr
    })
    .then((responseArray) => {
        //empty array even though the length inside the queue said other wise, i know its a problem with async and sync actions but is there a way to make the promise chain and async queue play nice?
        res.json(responseArray)
    })
})



via Long Phan

No comments:

Post a Comment