Javascript 承诺。在承诺之前,一切都完成了;他靠什么
我有一个API请求列表,只有当所有请求都完成时,我才会返回一个答案。我用这个承诺。所有的一切都是为了那个,但这似乎是当时的承诺。所有的一切都是在他应该等待的承诺之前被触发的。 我想这是因为我在post请求中有一个get请求。我怎样才能做到这一点 这是一个react redux项目Javascript 承诺。在承诺之前,一切都完成了;他靠什么,javascript,promise,Javascript,Promise,我有一个API请求列表,只有当所有请求都完成时,我才会返回一个答案。我用这个承诺。所有的一切都是为了那个,但这似乎是当时的承诺。所有的一切都是在他应该等待的承诺之前被触发的。 我想这是因为我在post请求中有一个get请求。我怎样才能做到这一点 这是一个react redux项目 if (devices) { const APIArray = []; devices.forEach(device => { const data = {
if (devices) {
const APIArray = [];
devices.forEach(device => {
const data = {
id: device.id,
};
dispatch({ type: EDIT_DEVICE, payload: data });
APIArray.push(
axios
.post('/deploy/update', data)
.then(res => {
ApiUtils.get(`/deploy/device?deviceId=${data.id}`).then(response => {
console.log('1');
dispatch({ type: EDIT_DEVICE_SUCCESS, payload: { device: response.data } });
});
})
.catch(error => {
dispatch({ type: EDIT_DEVICE_FAIL, payload: { device: data, error: error } });
})
);
});
return Promise.all(APIArray)
.then(res => {
console.log('2');
dispatch({ type: UPDATE_DEVICES_SUCCESS, payload: res });
return res;
})
.catch(err => {
return err
);
}
expected: console.log('1')
console.log('1')
console.log('2')
actual: console.log('2')
console.log('1')
console.log('1')
这是因为这些承诺是由Axios.post返回的,但一旦您收到post结果,您就会执行另一个承诺
APIArray.push(
axios
.post('/deploy/update', data)
.then(res => {
return ApiUtils.get(`/deploy/device?deviceId=${data.id}`).then(response => {
console.log('1');
dispatch({ type: EDIT_DEVICE_SUCCESS, payload: { device: response.data } });
});
})
.catch(error => {
dispatch({ type: EDIT_DEVICE_FAIL, payload: { device: data, error: error } });
})
);
在then中,我添加了一个return语句。通过这种方式,ApiUtils.get承诺被传递到承诺链。这是因为承诺是由Axios.post返回的承诺,但一旦收到post结果,您将执行另一个承诺
APIArray.push(
axios
.post('/deploy/update', data)
.then(res => {
return ApiUtils.get(`/deploy/device?deviceId=${data.id}`).then(response => {
console.log('1');
dispatch({ type: EDIT_DEVICE_SUCCESS, payload: { device: response.data } });
});
})
.catch(error => {
dispatch({ type: EDIT_DEVICE_FAIL, payload: { device: data, error: error } });
})
);
在then中,我添加了一个return语句。这样,ApiUtils.get promise就会传递到promise链。您必须将内部承诺返回到外部链:
return ApiUtils.get(`/deploy/device?deviceId=${data.id}`).then(/*...*/);
通过返回,外部
返回的承诺将被链接。您必须将内部承诺返回到外部链:
return ApiUtils.get(`/deploy/device?deviceId=${data.id}`).then(/*...*/);
通过返回它,外部返回的承诺将被链接。您应该更改
.then(res => {
ApiUtils.get(`/deploy/device?deviceId=${data.id}`).then(...);
})
借
你应该改变
.then(res => {
ApiUtils.get(`/deploy/device?deviceId=${data.id}`).then(...);
})
借