我有一個自定義useMutation鉤子:
const {
status: updateScheduleStatus,
reset: updateScheduleReset,
mutateAsync: updateSchedule,
} = useUpdateSchedule(queryClient, jobId as string);
我知道設定了突變,但是如果我想做多個并行突變,我將如何使用它?
我試圖實作以下內容,但突變在到達Promise.all(mutations生產線之前執行。
let mutations: Array<any> = [];
schedulesForDeletion.forEach(async (schedule) => {
const resp = await monitoringService?.getSchedule(
schedule.schedule_id,
);
mutations.push(
updateSchedule({
monitoringService: monitoringService as MonitoringServiceClient,
schedule,
etag: resp?.type === "data" ? resp.headers.etag : "",
}),
);
});
console.dir(mutations);
await Promise.all(mutations);
我會通過它作為mutateAsync回報Promise,他們不會按順序觸發,但似乎確實如此。
有沒有辦法處理這個問題,react-query或者我最好用 axios 執行這個?這樣做很有用,react-query因為當突變成功時我需要使一些查詢無效。
uj5u.com熱心網友回復:
并行運行多個突變確實適用于mutateAsync:
const { mutateAsync } = useMutation(num => Promise.resolve(num 1))
const promise1 = mutateAsync(1)
const promise2 = mutateAsync(2)
await Promise.all([promise1, promise2])
我猜在您的示例中,您將 Promise 推送到陣列,然后繼續回圈并await monitoringService?.getSchedule. 只有在回傳之后,您才會觸發第二個突變。
所以從這個意義上說,這似乎是“阻止”你執行的原因。如果你推送來自 的原始 Promise getSchedule,它應該可以作業:
schedulesForDeletion.forEach((schedule) => {
mutations.push(
monitoringService?.getSchedule(
schedule.schedule_id,
).then(resp => updateSchedule({...})
)
)
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/415603.html
標籤:
上一篇:如何在影像內的div內定位文本?
