我的功能是从Gmail收到电子邮件。我想运行此功能n次或直到找到电子邮件。
什么是正确的方法?我尝试过:http://caolan.github.io/async/docs.html#retry但没有成功。
我在阅读本文后如何阅读电子邮件:https://developers.google.com/gmail/api/quickstart/nodejs
答案 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
。