我有一個函式呼叫 API 來獲取特定資源的 id。然后將此 id 作為洗掉請求傳遞給第二個 API 呼叫。問題是第一個 API 正確地回傳了值,但第二個呼叫仍然使用過時的值(最初分配的值)執行。
我想這可能是并行處理的問題?有人可以提供任何指導嗎?附上我的代碼和輸出。“4”是從第一個 API 回傳的正確 id,但第二次呼叫仍然是用“-1”進行的。
export function deleteBook(title: string): Promise<Book> {
let bookId = -1;
findBook(title).then((response) => {
bookId = Number(response[0].id);
console.log(bookId);
});
let API = apiURL `/api/books/${bookId}`;
return axiosInstance
.delete(API)
.then((responseJson) => {
return Promise.resolve(responseJson.data);
})
.catch((error) => {
return Promise.reject(error);
});
}

uj5u.com熱心網友回復:
您目前正在啟動 findBook,但沒有等待它完成。啟動 findBook 后,立即使用 bookId = -1 進行洗掉。一段時間后,findBook 將完成,但為時已晚,無法幫助洗掉。任何需要在 findBook 上等待的代碼都需要在.then回呼中(直接的或者更遠的 Promise 鏈)。
export function deleteBook(title: string): Promise<Book> {
return findBook(title)
.then(response => {
const bookId = Number(response[0].id);
const API = apiURL `/api/books/${bookId}`;
return axiosInstance.delete(API);
})
.then(responseJson => {
return responseJson.data; // No need to wrap it in Promise.resolve, you're already in a .then callback
});
// No need to catch and then reject; that's the same as not catching it at all
}
如果您更喜歡 async/await,則相同的代碼將是:
export async function deleteBook(title: string): Promise<Book> {
const response = await findBook(title);
const bookId = Number(response[0].id);
const API = apiURL `/api/books/${bookId}`;
const responseJson = await axiosInstance.delete(API);
return responseJson.data;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/489903.html
標籤:javascript 反应 休息
