簡體   English   中英

遞歸 function 在 Promise 中不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM