如何让一切按顺序发生(Node js)
How to make everything happen in order (Node js)
我正在编写一个程序来从 CSV 文件中获取数据,复制图像,使用 Jimp 将文本(CSV 文件中某人的姓名)打印到该图像上,然后发送一封带有图像附件的电子邮件到电子邮件(电子邮件在 CSV 文件中找到),删除图像,然后重复。
我遇到的问题:一切都以错误的顺序发生!我记录了所有事件,在控制台中看起来像这样:
Duplicate sucessful!
Duplicate sucessful!
[Function: send]
Hint: hit control+c anytime to enter REPL.
Email sent: 250 2.0.0 OK 1616631705 k17sm3426218pfa.68 - gsmtp
Email sent: 250 2.0.0 OK 1616631705 y68sm4040117pgy.5 - gsmtp
Draw successful!
Draw successful!
File deleted!
Error: ENOENT: no such file or directory, unlink 't.png'
at Object.unlinkSync (fs.js:1136:3)
at Timeout._onTimeout (/home/runner/TestWriting/index.js:82:10)
at listOnTimeout (internal/timers.js:554:17)
at processTimers (internal/timers.js:497:7) {
errno: -2,
syscall: 'unlink',
code: 'ENOENT',
path: 't.png'
}
t.png
是我正在复制的图片。同时,当我收到电子邮件时,图像附件上没有打印任何内容!这里有一些伪代码来说明我的 js 文件是什么样子的:
load csv information
loop:
duplicate image from another image
print text onto image
send email
delete duplicated image
end loop
我在我的代码中设置了大量的超时,但它所做的只是变得更加混乱。它在没有循环的情况下工作(有一些超时),但是一旦我添加了它,一切都变得一团糟。 我很难理解所有在线教程。
我对 Node.js 比较陌生,有人可以帮我吗?
非常感谢任何帮助!
我最后使用 DeAsync 和布尔值来确认进程何时完成。
该过程完美运行:
Duplicate sucessful!
Draw successful!
Email sent: 250 2.0.0 OK 1616636784 p17sm3690310pfn.62 - gsmtp
File deleted!
Duplicate sucessful!
Draw successful!
Email sent: 250 2.0.0 OK 1616636792 s22sm3529891pjs.42 - gsmtp
File deleted!
详细地说,我在页面顶部声明了几个布尔值,然后一旦一个过程完成,布尔值就被声明为真。为了防止程序停止运行,这就是 DeAsync 的用武之地:
while(!duDone) require('deasync').runLoopOnce();
其中 duDone 是流程完成后声明为 true 的变量。
我正在编写一个程序来从 CSV 文件中获取数据,复制图像,使用 Jimp 将文本(CSV 文件中某人的姓名)打印到该图像上,然后发送一封带有图像附件的电子邮件到电子邮件(电子邮件在 CSV 文件中找到),删除图像,然后重复。
我遇到的问题:一切都以错误的顺序发生!我记录了所有事件,在控制台中看起来像这样:
Duplicate sucessful!
Duplicate sucessful!
[Function: send]
Hint: hit control+c anytime to enter REPL.
Email sent: 250 2.0.0 OK 1616631705 k17sm3426218pfa.68 - gsmtp
Email sent: 250 2.0.0 OK 1616631705 y68sm4040117pgy.5 - gsmtp
Draw successful!
Draw successful!
File deleted!
Error: ENOENT: no such file or directory, unlink 't.png'
at Object.unlinkSync (fs.js:1136:3)
at Timeout._onTimeout (/home/runner/TestWriting/index.js:82:10)
at listOnTimeout (internal/timers.js:554:17)
at processTimers (internal/timers.js:497:7) {
errno: -2,
syscall: 'unlink',
code: 'ENOENT',
path: 't.png'
}
t.png
是我正在复制的图片。同时,当我收到电子邮件时,图像附件上没有打印任何内容!这里有一些伪代码来说明我的 js 文件是什么样子的:
load csv information
loop:
duplicate image from another image
print text onto image
send email
delete duplicated image
end loop
我在我的代码中设置了大量的超时,但它所做的只是变得更加混乱。它在没有循环的情况下工作(有一些超时),但是一旦我添加了它,一切都变得一团糟。 我很难理解所有在线教程。
我对 Node.js 比较陌生,有人可以帮我吗?
非常感谢任何帮助!
我最后使用 DeAsync 和布尔值来确认进程何时完成。 该过程完美运行:
Duplicate sucessful!
Draw successful!
Email sent: 250 2.0.0 OK 1616636784 p17sm3690310pfn.62 - gsmtp
File deleted!
Duplicate sucessful!
Draw successful!
Email sent: 250 2.0.0 OK 1616636792 s22sm3529891pjs.42 - gsmtp
File deleted!
详细地说,我在页面顶部声明了几个布尔值,然后一旦一个过程完成,布尔值就被声明为真。为了防止程序停止运行,这就是 DeAsync 的用武之地:
while(!duDone) require('deasync').runLoopOnce();
其中 duDone 是流程完成后声明为 true 的变量。