簡體   English   中英

node.js回調和遞歸

[英]node.js callback and recursion

我正在使用google api獲取我郵箱中所有郵件的列表。 API正在對列表進行分頁,並且每次調用它都會返回下一頁,因此我必須以遞歸方式調用它:

const fetch = (cb, next) => {
    google.gmail('v1').users.messages.list({
        auth: oauth2Client,
        userId: 'me',
        pageToken: next
    }, cb)
}
const store = (err, result) => {
    // do something with result and then
    if (result.nextPageToken) {
        fetch(store, result.nextPagetToken)
    }
}

fetch(store)

有沒有更好的方法來避免遞歸,所以我不會破壞堆棧?

代替:

fetch(store, result.nextPagetToken)

您可以使用:

process.nextTick(fetch, store, result.nextPagetToken);

但如果在messages.list()回調中已經完成了類似的事情,那么甚至可能沒有必要。 除了正確的尾部調用優化之外,JS已經支持並且在6.5.0版本的Node中可以使用--harmony標志,請參閱:

即使在最古老的Node版本中,也有我的tco模塊可以進行無限遞歸。

我擔心我不知道谷歌API,但一般來說你應該看看Promises:

使用承諾| Google API

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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