我有一个像这样的数组

array =[ {message:'http://about.com'}, {message:'http://facebook.com'}]


我想循环该数组,在每个项目上我都会向服务器发出请求以获取opengraph数据,然后将数据保存回数组。这是我所期望的

array =[
    {
        message: { url:'http://about.com', title:'about'}
    },
    {
       message:{ url:'http://facebook.com', title:'facebook'}
    }
]


然后,当一切都完成了。我想用有效载荷调度一个动作是期望的数组。这是我做的

return dispatch => {

    let array =[ {message:'http://about.com'}, {message:'http://facebook.com'}]

    let quests = array
    .map( (item) => {
        axios.get(getOpenGraphOfThisLink + item.message)
        .then( result =>{
            item.message = (result.data)
            return result
        })
    })

    Promise.all(quests).then( () => {
        console.log( 'modified', array)
        dispatch({
            type   : constant.GET_POST_COLLECTION_SUCCESS,
            payload: array
        })
        // this dispatch function sends my original array instead of modified one.
    })
}


问题:代码中的调度功能会将我的原始数组发送给reducer而不是修改后的数组。我想调度发送新的修改后的数组。我认为应该,不是吗?

最佳答案

现在quests变量只是由您的原始数组分配的,因为map函数返回void,但是您需要将每个项目的承诺返回给quests,因此只需添加return关键字,这样您的代码是这样的:

let quests = array
    .map( (item) => {
        return axios.get(getOpenGraphOfThisLink + item.message)
        .then( result =>{
            item.message = (result.data)
            return result
        })
    })

08-26 12:19