gpt4 book ai didi

javascript - 在 Javascript 中创建循环以与 imap-simple nodejs 包一起使用

转载 作者:行者123 更新时间:2023-12-04 08:57:21 25 4
gpt4 key购买 nike

首先,关于我的测试脚本将涵盖的内容的一些背景知识。
按网站上的按钮将向测试邮箱发送一封电子邮件。
此电子邮件可能需要 10 到 30 分钟才能到达测试邮箱。
所以使用以下来自 imap-simple 的代码;

'get new email info': function(browser) {
imaps.connect(config).then(function (connection) {
return connection.openBox('INBOX').then(function () {
var searchCriteria = ['UNSEEN'];
var fetchOptions = {
bodies: ['HEADER', 'TEXT'],
markSeen: false
};
return connection.search(searchCriteria, fetchOptions).then(function (results) {
var subjects = results.map(function (res) {
return res.parts.filter(function (part) {
return part.which === 'HEADER';
})[0].body.subject[0];
});
console.log(subjects);
正确返回空白 主题 数组,因为测试邮箱尚未收到电子邮件。
在脚本“有效”的开头添加 30 分钟的暂停,在 30 分钟之后 主题 当电子邮件在 30 分钟窗口内(99.99% 的时间)发送时填充数组。
然而,这绝对不理想,因为电子邮件可能会在 15 分钟内收到,这意味着测试“浪费”了 15 分钟。
所以我最理想的做法是编写某种形式的循环 (?) 来测试 主题 数组是否填充。
因此,如果数组已填充,则继续测试脚本的其余部分(这需要测试数组是否包含特定文本)。
如果未填充数组,请再等待一分钟,然后重试。
继续每分钟尝试一次,直到填充数组。
我试过 setInterval , 对于 循环, 虽然 循环等,但我似乎无法让它们工作,而且老实说我没有想法。
任何建议、帮助、引用将不胜感激,如果需要,可以及时添加更多信息。

最佳答案

一种方法是使用递归。

const createPromise = ms => new Promise((resolve, reject) => {
setTimeout(() => resolve(ms), ms)
});

function findUnseenEmails(connection) {
return connection.openBox('INBOX').then(function () {
var searchCriteria = [
'UNSEEN'
];

var fetchOptions = {
bodies: ['HEADER', 'TEXT'],
markSeen: false
};

return connection.search(searchCriteria, fetchOptions).then(function (results) {
var subjects = results.map(function (res) {
return res.parts.filter(function (part) {
return part.which === 'HEADER';
})[0].body.subject[0];
});
console.log(subjects);
return subjects.length > 0 ? subjects : createPromise(5000).then(function() { return findUnseenEmails(connection)});
});
});
}

imaps.connect(config).then(function (connection) {
return findUnseenEmails(connection);
}).then((subjects) => console.log('finished', subjects));
当然存在堆栈溢出的可能性和危险,但在这种情况下,请随时回到堆栈溢出,在我们社区非递归解决方案的帮助下找到这里。
结果:
Gif with result
编辑:
回答您关于关闭连接的问题:
我会这样做(在 findUnseenEmails 函数中)
if (subjects.length > 0) {
connection.end();
return subjects;
} else {
return createPromise(5000).then(function() { return findUnseenEmails(connection)});
}

关于javascript - 在 Javascript 中创建循环以与 imap-simple nodejs 包一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63743250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com