use*_*286 5 asynchronous react-native redux redux-thunk react-redux
我收到错误"Redux Actions必须是普通对象.使用自定义中间件进行异步操作." 使用以下代码.
export const getFriends = () => async(): Action => {
const requestConfig = {
httpMethod: 'GET',
version: 'v2.7',
};
let hasMore = false;
let friends = [];
do {
const infoRequest = new GraphRequest(
'/me/friends',
requestConfig,
(error, result) => {
if (error) {
alert('Error fetching data facebook friends');
} else {
result.data.forEach((value) => {
friends.push(value)
});
if (result.paging && result.paging.next) {
hasMore = true;
requestConfig.parameters.after = result.paging.cursors.after;
} else {
hasMore = false;
}
}
});
await new GraphRequestManager().addRequest(infoRequest).start();
} while (hasMore);
return {
type: 'GET_FRIENDS',
payload: friends // this is empty because there is no await on GraphAPI
};
};
Run Code Online (Sandbox Code Playgroud)
如果我删除了异步并等待,那么返回的朋友是空的,因为在返回GraphAPI调用之前返回了函数调用
export const getFriends = () => (): Action => {
const requestConfig = {
httpMethod: 'GET',
version: 'v2.7',
};
let hasMore = false;
let friends = [];
do {
const infoRequest = new GraphRequest(
'/me/friends',
requestConfig,
(error, result) => {
if (error) {
alert('Error fetching data facebook friends');
} else {
result.data.forEach((value) => {
friends.push(value)
});
if (result.paging && result.paging.next) {
hasMore = true;
requestConfig.parameters.after = result.paging.cursors.after;
} else {
hasMore = false;
}
}
});
new GraphRequestManager().addRequest(infoRequest).start();
} while (hasMore);
return {
type: 'GET_FRIENDS',
payload: friends // this is empty because there is no await on GraphAPI
};
};
Run Code Online (Sandbox Code Playgroud)
该错误的含义正如其听起来的那样。Redux 需要一个普通对象。我看到标有 redux-thunk 的问题。如果您使用的是 redux-thunk,可能您没有正确设置中间件的存储。如果您不使用 redux-thunk 那么我会推荐它作为分派异步操作的首选库。
这将使您深入了解如何调度非普通对象的 redux 操作。 如何调度一个超时的 Redux 操作?
编辑:您缺少实际的调度,并试图简单地返回普通对象...需要返回调度...类似于以下内容(尚未测试,但应该让您接近):
export const getFriends = () => {
return (dispatch) => {
const requestConfig = {
httpMethod: 'GET',
version: 'v2.7',
};
let hasMore = false;
let friends = [];
do {
const infoRequest = new GraphRequest(
'/me/friends',
requestConfig,
(error, result) => {
if (error) {
alert('Error fetching data facebook friends');
} else {
result.data.forEach((value) => {
friends.push(value)
});
if (result.paging && result.paging.next) {
hasMore = true;
requestConfig.parameters.after = result.paging.cursors.after;
} else {
hasMore = false;
return dispatch({
type: 'GET_FRIENDS',
payload: friends
});
}
}
});
await new GraphRequestManager().addRequest(infoRequest).start();
} while (hasMore);
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6073 次 |
| 最近记录: |