所有数据加载完毕后,我试图执行一些操作,但是我对诺言的处理不当感到麻烦。
export function waitForAll() {
return function (dispatch, getState) {
Promise.all([
dispatch(getCharacteristics()),
dispatch(getItems())]
).then(()=>{
let state = getState();
dispatch(update(state))
}).catch(function(err){
console.log(err);
});
}
}
这是为此诺言而调用的2个函数:
export function getCharacteristics() {
return function (dispatch) {
axios.get('api/charac').then((response) =>
{
dispatch(fetchCharacteristics(response.data));
}).catch(error =>{
console.log(error);
});
}
}
和
export function getItems() {
return function (dispatch) {
axios.get('api/45897').then((response) =>
{
dispatch(fetchItems(response.data.equipements));
}).catch(error =>{
console.log(error);
});
}
}
我的状态没有更新,这意味着我的诺言没有得到正确处理,我的初始状态是[]。
一个替代方法可以是React中的componentDidMount()来调用该函数,但是我不确定如何验证两个状态是否正确加载(不同的组件)
我不知道如何使它起作用,欢迎任何帮助!
答案 0 :(得分:3)
您实际上并没有兑现承诺。安排您的代码以返回承诺(不仅仅是解决承诺),然后您就可以利用Promise.all
示例:
async function promise1 () {
const promise = await fetch('https://jsonplaceholder.typicode.com/todos/1');
return promise.json();
};
async function promise2 () {
const promise = await fetch('https://jsonplaceholder.typicode.com/todos/2');
return promise.json();
};
async function getAllPromises() {
const results = await Promise.all([promise1(), promise2()]);
console.log(results);
};
getAllPromises();
基本上,我认为您可以只返回axios.<httpverb>
示例(最好的猜测,因为我无法运行您的代码):
export function waitForAll() {
return function (dispatch, getState) {
Promise.all([
dispatch(getCharacteristics()),
dispatch(getItems())]
).then(()=>{
let state = getState();
dispatch(update(state))
}).catch(function(err){
console.log(err);
});
}
}
export function getCharacteristics(dispatch) {
return new Promise ( (resolve, reject) {
axios.get('api/charac').then((response) =>
{
resolve(dispatch(fetchCharacteristics(response.data)));
}).catch(error =>{
reject(error);
console.log(error);
});
});
}
export function getItems(dispatch) {
return new Promise ((resolve, reject) {
axios.get('api/45897').then((response) =>
{
resolve(dispatch(fetchItems(response.data.equipements)));
}).catch(error =>{
reject(error);
console.log(error);
});
});
}