条件异步功能

时间:2016-12-17 11:11:29

标签: javascript node.js asynchronous gmail

我的功能是从Gmail收到电子邮件。我想运行此功能n次或直到找到电子邮件。

什么是正确的方法?我尝试过:http://caolan.github.io/async/docs.html#retry但没有成功。

我在阅读本文后如何阅读电子邮件:https://developers.google.com/gmail/api/quickstart/nodejs

1 个答案:

答案 0 :(得分:1)

假设您有一个名为function get(n) { return gmail().catch(() => { if (!n) throw "Too many tries!"; return get(--n); }; } 的例程,如果找到电子邮件则返回成功(履行)的承诺,否则失败(拒绝),则:

get(5).then(
  mail => console.log(mail.body),
  () => console.log("No mail!"));

用法:

function get(n) {
  let promise = Promise.reject();

  do { promise = promise.catch(gmail); } while (n--);

  return promise;
}

如果由于某种原因你不喜欢递归式:

gmail

如果function get(n, cb) { gmail(function(err, data) { if (err) if (!n) get(--n, cb); else cb("Too many tries!"); else cb(null, data); }); } 是回调样式,那么

gmail

或者更好的是,使用库或

宣传function promisify(fn) { return new Promise((resolve, reject) { fn(function(data, err) { if (err) reject(err); else resolve(data); }); }); }
gmail

然后使用promisify(gmail)替换第一个解决方案中的group by