首页 > 解决方案 > 异步/等待在 createAsyncThunk 中定义的 for-of 循​​环中不起作用

问题描述

在使用createAsyncThunk. 我希望它将按顺序为数组中的每个同步dispatch(performRunAllCells())调用 API 。相反,调度导致一次被异步调用。这里发生了什么?updateBrowser()celleditor.cellsupdateBrowser()

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);
    }
  },
);

编辑

目前我正在updateBrowser()使用 setTimeout 进行测试:

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);
  });
}

我可以通过上面的控制台日志知道它是同步/异步的。目前,它一次打印多个“测试”。

标签: reactjstypescriptredux

解决方案


没关系。我在其他地方犯了一个错误,实际上并没有调用代码。修复后它现在可以工作了。


推荐阅读