[英]Recursive function doesn't work within Promise
我有一個 function ,其中嵌套了 Promise。 當長度值為 streamRes.length 時,我想重新執行此streamRes.length
。 目前,它只執行代碼並在控制台上打印出長度,但不會重新執行。
let fetchEnrolleesData = () => {
getLastUpdatedEnrollee().then(res => {
let params = path+"enrollees?limit=100";
params += res.last_date ? "&last_updated_at=" + res.last_date.value : '';
fetchEnrolleesDataInStream(res, params).then(streamRes => {
if(streamRes.length) {
console.log(streamRes.length);
fetchEnrolleesData();
}
});
});
}
正如Evolutionxbox 所寫,您需要返回 getLastUpdatedEnrollee 返回的getLastUpdatedEnrollee
以及 promise getLastUpdatedEnrollee
本身。 通常,當在 function 中調用 promise 時,您需要返回這些承諾,以便在 function 之外使用這些值。
這是您的代碼,並根據需要添加了return
:
let fetchEnrolleesData = () => {
return getLastUpdatedEnrollee().then(res => {
let params = path+"enrollees?limit=100";
params += res.last_date ? "&last_updated_at=" + res.last_date.value : '';
return fetchEnrolleesDataInStream(res, params).then(streamRes => {
if(streamRes.length) {
console.log(streamRes.length);
return fetchEnrolleesData();
}
});
});
}
作為可選的附注,您可能更喜歡使用() => …
語法而不是() => { … }
來消除在頂級 function 中編寫return
的需要。 您可以在頂級 function 中執行此操作,因為它沒有其他語句; 這在具有多個語句的內部 function 中不起作用。 有關更多詳細信息,請參見箭頭 function 表達式。
let fetchEnrolleesData = () =>
getLastUpdatedEnrollee().then(res => {
// …
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.