javascript - node.js 回调和递归

标签 javascript node.js

我正在使用 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() 回调中完成,那么它甚至可能没有必要。除了适当的尾调用优化已经在 J​​S 中得到支持,并且当您使用 --harmony 标志时在 Node 中从 6.5.0 版本开始可用,请参阅:

还有我的tco即使在最旧版本的 Node 中也可以无限递归的模块。

关于javascript - node.js 回调和递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42806674/

相关文章:

javascript - 在 FileSaver.js 中保存文件后关闭窗口

javascript - 如何将节点值列表合并到 Javascript 中的一个数组中?

javascript - 访问后如何创建链接没有任何样式规则

javascript - 查询对象数组不包含等于字符串值的属性

javascript - PrerenderIO 无法在我的 MeteorApp 上运行

node.js - 有没有办法限制Node.js Electron 应用程序只能访问某些网址

javascript - 如何从 javascript 获取 Meteor 的 MongoDB URL

javascript - 正确的 ES6 导入以添加力矩精确范围插件

javascript - 如何安全地连接到另一台服务器上的 MySQL 数据库?

javascript - 在平板电脑和智能手机上展开和折叠的慢速动画