我正面临一个奇怪的问题。
我的全局状态中有一个对象,需要用3个不同的API端点调用填充。
所以我选择用onQueryStarted
方法设置一个特定的查询。
并在此方法中一起进行3个API调用。
以下是来自api.ts
服务的endpoints
:
{
scenario: builder.query({ query: ({theid}) => `scenarios/${scenarioId}`}),
milestones: builder.query({ query: ({theid}) => `scenarios/${scenarioId}/ml`}),
groups: builder.query({ query: ({theid}) => `scenarios/${scenarioId}/pg`}),
setCurrentScenario: builder.query({
query: id => `scenarios/${id}`,
async onQueryStarted (id, { dispatch, queryFulfilled, getState }) {
try {
let ml = await api.endpoints.milestones.initiate({theid: id})(dispatch, getState, "api")
let pg = await api.endpoints.groups.initiate({theid: id})(dispatch, getState, "api")
let currentScen = await queryFulfilled
dispatch( scenarioActions.addCurrentScenario( currentScen.data ))
dispatch( scenarioActions.addCurrentScenarioMilestones( ml.data ))
dispatch( scenarioActions.addCurrentScenarioPlayerGroups( pg.data ))
} catch (error) {
console.log('ERRORE IN SETCURRENTSCENARIO: ', error)
}
}
字符串
这工作正常,但是当我测试时,我需要添加一些“睡眠”功能,尽管事实上我用await
dispatch
setCurrentScenario
端点:
describe('A single Scenario should be fetched if user is manager', () => {
it('should populate `current` scenario after asking with its `id`', async () => {
// this populates `state.scenarios.current`
await store.dispatch( api.endpoints.setCurrentScenario.initiate( 1 ) )
const sleep = (time:number) => new Promise((reslv) => setTimeout(reslv, time));
await sleep(1000)
const currentScenario = store.getState().scenarios.current
console.log({currentScenario})
expect(store.getState().scenarios.current?.name).not.toBeNull()
})
})
型
我不明白,如果我在那个store.dispatch()
上使用await
,为什么我需要睡觉?
谢谢你的帮助。
1条答案
按热度按时间yh2wf1be1#
因为
await
的意思是“这样做,我们以后继续执行代码”。其他代码(在本例中是您的测试)可以在两者之间运行。所以你的测试必须完成,直到所有的事情都完成了,所有“后来”的代码也都执行了。