【发布时间】:2021-06-10 05:54:49
【问题描述】:
在使用createAsyncThunk 时,我在尝试让异步等待在 for 循环中工作时遇到问题。我预计dispatch(performRunAllCells()) 将按顺序为editor.cells 数组中的每个cell 同步调用API updateBrowser()。相反,调度导致updateBrowser() 一次被异步调用。这里发生了什么?
export const performRunAllCells = createAsyncThunk(
'editor/runAllCells',
async (_, { dispatch, getState, rejectWithValue }) => {
const { notebook: { selectedDataset } } = getState() as {notebook: {selectedDataset: string}};
const { editor } = getState() as {editor: EditorState};
try {
let results: DataEntity | undefined;
for (const cell of editor.cells) {
dispatch(setCellStatus({ id: cell.id, execStatus: '*' }));
results = await updateBrowser(selectedDataset, cell.editorContent);
dispatch(setCellStatus({ id: cell.id }));
}
return results;
} catch (e) {
return rejectWithValue(e.response.data);
}
},
);
编辑
目前我正在使用 setTimeout 测试 updateBrowser():
export async function updateBrowser(selectedDataset: string, editorContent: string): Promise<DataEntity> {
return new Promise((resolve) => {
setTimeout(() => {
console.log('test');
resolve({
raw: editorContent, html: 'Test', console: 'Test',
});
}, 3000);
});
}
我可以通过上面的控制台日志知道它是同步/异步的。目前,它一次打印多个“测试”。
【问题讨论】:
-
你能分享
updateBrowser的代码吗?另外,您能否说明一下您目前如何确定这是同步发生还是异步发生? -
@phry,我已经编辑了我的问题。谢谢!
标签: reactjs typescript redux