在我的反应组件中,我在ComponentDidMount()
中调用了这样的操作:
componentDidMount() {
const { actions } = this.props
function save_project_continiously() {
console.log("inside")
actions.save_project().then(save_project_continiously)
}
save_project_continiously()
}
我在这里不停地呼吁行动......我的行为就像:
export function save_project() {
return (dispatch, getState) => {
setTimeout(() => {
return dispatch(manage_data()).then(response => {
console.log("Hellooww world")
return response
})
}, 3000)
}
}
当我这样做时,它给我一个错误,说.then()
不是ComponentDidMount()
中的函数。
如果我这样做
export function save_project() {
return (dispatch, getState) => {
return dispatch(manage_data()).then(response => {
console.log("Hellooww world")
return response
})
}
}
它被连续调用,但我想在特定时间后连续调用它。
我试过了:
export function save_project() {
return (dispatch, getState) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
return dispatch(manage_data()).then(response => {
console.log("Hellooww world")
return response
})
}, 3000)
})
}
}
但它只被调用一次..不会给出任何错误,但它只调用一次..
我想要的是我想在完成动作后的特定时间后连续调用动作。
在这里,我想打电话给save_project
,在完成之后我又想在3秒后打电话给它,然后继续......
我怎样才能实现?
有什么建议吗?
提前致谢
答案 0 :(得分:1)
在这段代码中,您将承诺包含在承诺中,但您实际想要做的是在成功的承诺解析时再次执行此代码。
export function save_project() {
// So this code does return callback, so it does not return promise
// in your first example.
return (dispatch, getState) => {
// Then this code returns promise, but it never gets resolved.
return new Promise((resolve, reject) => {
setTimeout(() => {
// Then you return promise from set timeout, but it
// is doubtful as well
return dispatch(manage_data()).then(response => {
console.log("Hellooww world")
return response
})
}, 3000)
})
}
}
你真正想做的是:
// Just return promise of dispatch instead of wrapping it in
// a callback.
export function save_project() {
return dispatch(manage_data());
}
// Then use set timeout here
function save_project_continiously() {
console.log("inside")
actions.save_project().then(() => {
setTimeout(save_project_continiously, 3000);
});
}
或者,如果您真的想在save_project
中进行回调,则需要使用正确的args正确调用它,就像您的示例中的undefined
一样。
答案 1 :(得分:0)
尝试setInterval()
export function save_project() {
return new Promise((resolve, reject) => {
setTimeout(() => {
dispatch(manage_data()).then(response => {
resolve(response);
}, error => {
reject(response);
})
}, 3000)
});
}