Vuex: Returning promise after for loop finish.

Created on 11 Nov 2016  路  4Comments  路  Source: vuejs/vuex

How do I handle returning object after async for loop.
I need to process asynchronous all my elements and then call resolve(), but when I insert resolve() in loop it return after first element in loop. And when I'm adding resole() after loop it return empty object.

let boards = []
return new Promise((resolve, reject) => {
    for (let i = 0; i < app.$store.state.sharedBoards.length; i++) {
        app.$http.get('http://localhost:3000/boards?id=' + app.$store.state.sharedBoards[i]).
        then((response) => {
            boards.push(response.body[0])
            //resolve()
        }, (response) => {
            console.log(response)
        });
        //resolve()
    }
 });

Most helpful comment

Thank you so much. It worked perfectly.

let boards = []
let promises = []

for (let i = 0; i < app.$store.state.sharedBoards.length; i++) {
    promises.push(new Promise((resolve, reject) => {
        app.$http.get('http://localhost:3000/boards?id=' + app.$store.state.sharedBoards[i]).
        then((response) => {
            resolve(response.body[0])
        }, (response) => {
            console.log(response)
        })
    })
    )
}

return Promise.all(promises)

All 4 comments

Thank you so much. It worked perfectly.

let boards = []
let promises = []

for (let i = 0; i < app.$store.state.sharedBoards.length; i++) {
    promises.push(new Promise((resolve, reject) => {
        app.$http.get('http://localhost:3000/boards?id=' + app.$store.state.sharedBoards[i]).
        then((response) => {
            resolve(response.body[0])
        }, (response) => {
            console.log(response)
        })
    })
    )
}

return Promise.all(promises)

Worked perfectly, thanks!

Awesome, worked perfectly, thank you very much

Was this page helpful?
0 / 5 - 0 ratings