- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个小守护程序,检查是否有邮件要发送,如果需要则执行工作,然后休眠 X 秒。
我对NodeJS的异步方式不太熟悉。所以我迷路了。
var sleep = require('sleep');
function getMailToSend(callback){
[...]
}
function sendmail(mail, callback) {
[...]
}
while(true){
sleep.sleep(10);
getMailToSend(function(err, mail) {
if(err) //Do log, whatever
sendMail(mail, function(err, response) {
if(err) //Do log...
});
}
正如您所读到的:
有人知道谁会意识到这一点吗?
在 qubyte 的第一个解决方案后编辑
我有一个解决方案,但很丑:s
var obj = { sent: true};
setInterval(function () {
if(obj.sent === false){
return;
}
obj.sent = false;
getMailToSend(function(err, mail) {
sendMail(function(err, response){
obj.sent = true;
});
});
}, 10000);
最佳答案
如果您要求的是在发送下一封邮件之前完成一封邮件,那么像这样的异步函数可能会解决您的问题:
function handleMail (callback) {
function getMailToSend() {
// Logic to get mail.
// No mail left to process.
if (!mail) {
return callback();
}
sendMail(mail);
}
function sendMail(mail) {
// Logic to send the mail.
getMailToSend();
}
// Get the get-send cycle started.
getMailToSend();
}
请注意,handleMail
函数封装了 getMailToSend
和 sendMail
,它们相互调用。请注意,当前的 JavaScript 对可以经历的循环次数有限制,直到您的调用堆栈变得太大,这是堆栈溢出!
最后,编写这种异步代码很容易出现程序员错误。我强烈建议您选择一个图书馆来为您做这件事。一个流行的(我喜欢的)是 async ,但有很多可供选择。在上面的情况下,async.whilst
可以帮助您。
旁白 - 以下代码测试调用堆栈大小:
var i = 0;
function a(){
i += 1;
a();
}
a();
在 Node.js v0.10.26 中给出 i = 24275
。
关于javascript - NodeJS : Async comportment not wanted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23415896/
我一直在尝试解决问题,但我真的没有任何想法去解决以下问题: 我有一个软件应用程序可以监听能够将数据上传到计算机的设备。捕获此数据后,会将其写入文本文件并存储以备后用。 void DataRecieve
问题:尝试通过 Java 使用 comport 读取某些电子秤 我正在尝试使用 Java 从 com 端口读取数据。到目前为止,我已经成功创建了一个使用 Java SerialPort 和 Input
我使用 Visual Studio 2008 (C#) 或 Delphi CodeGear 编写了与串行 com 端口设备通信的程序。设备以十六进制格式向我发送数据,我读取了它。真实示例 - 40 3
我正在尝试编写一个小守护程序,检查是否有邮件要发送,如果需要则执行工作,然后休眠 X 秒。 我对NodeJS的异步方式不太熟悉。所以我迷路了。 var sleep = require('sleep')
我想获取 Android 设备所有可用 com 端口的列表,以便我可以选择将数据发送到哪个 com 端口。 我需要可用 com 端口的路径: /dev/ttymxc0 /dev/ttymxc1 /de
我目前正在按如下方式设置我的串口; #define PORT "COM10" serial.setPortName(PORT); 每当我从 10 更改端口号时,Qt 就无
我是嵌入式世界的初学者,因为作为一名软件工程师,我总是处于“电线的另一端”,所以请不要因为一个看似愚蠢的问题而责备我。 当我使用连接到计算机的蓝牙设备时,它通常显示为虚拟 COM 端口,我使用 win
我正在尝试获取当前正在使用的组件列表,以便在我的 GUI 中显示它们。我正在使用以下代码: TCHAR szComPort[8]; HANDLE hCom = NULL; char
希望在这里找到解决方案。 我有一个 Controller ,它使用 UART 上的应用程序特定协议(protocol),并且该协议(protocol)仅在 14400 bps 下工作。 我必须使用 j
我有一个 java 项目,它使用 comport 进行通信。并使用 comport 1 和 2 号码。但是我的 linux 系统没有 com 端口。我想运行代码并收听在 comport 上发送的数据。
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我使用Delphi Comport411f组件,我需要将二进制文件读取到流中,然后我需要将流以4096字节 block 发送到Comport,并在每个 block 写入后从Comport读取。 我的问
我正在尝试安装 Comport package在 Embarcadero RAD Studio XE 中。对于Delphi 表单,托盘会显示所有comport 模块(并且功能齐全,我非常确定),但是当
我是一名优秀的程序员,十分优秀!