【问题标题】:Async/await not working in a for-of loop defined in createAsyncThunk异步/等待在 createAsyncThunk 中定义的 for-of 循​​环中不起作用
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-07-15
    • 1970-01-01
    • 2021-09-07
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 2021-10-18
    • 1970-01-01
    相关资源
    最近更新 更多