NodeJS 在继续之前等待函数返回

发布于 2024-11-04 12:53:28 字数 197 浏览 0 评论 0原文

只是在使用 NodeJS 构建函数时遇到一些问题。它似乎没有返回值,我有一种感觉,这是由于函数调用的异步性质造成的。任何帮助将非常感激!

sendFilesToDB 发送要处理的文件数组(来自 fs.readdir)。文件的内容用于构建 SQL 查询。成功插入后,该文件将被删除。但 fileToQuery 函数根本不返回字符串(给出“参数必须是字符串”错误)。

Just having some issues with building a function using nodeJS. It doesn't seem to be returning the value, and I have a feeling its due to the asynchronous nature of the function call. Any help would be really appreciated!

sendFilesToDB is sent an array (from fs.readdir) of files to be processed. The files' content is used to construct a SQL query. Once successfully inserted, the file is deleted. But the fileToQuery function does not return a string at all (gives a 'Argument must be a string' error).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

等往事风中吹 2024-11-11 12:53:28

fileToQuery 返回 void,因为它说:

function fileToQuery(filePath) {
  do_something(...);
}

您拥有的 return 语句不是从 filesToQuery 返回,而是从您定义它的匿名函数返回。

您需要重写您的 < code>fileToQuery 函数接受一个额外的参数(可能是 resultCallback),而不是返回你的 sql 字符串,你可以这样做:

return resultCallback("INSERT IGNORE ....");

然后你将这样调用它:

fileToQuery(file,function(query){
  client.query(query, function(err, results) {
    fs.unlink(file, function(err) {
      sendFilesToDB(files);
    });
  });
});

顺便说一句:这是称为“连续传递样式”,可以用任何支持匿名函数的语言来完成。您所要求的称为可调用延续,但并不是很多语言都有它们。如果您有兴趣了解它们,您应该尝试选择方案。

fileToQuery is returning void, because it says:

function fileToQuery(filePath) {
  do_something(...);
}

That return statement you have isn't returning from filesToQuery but from the anonymous function you defined it in.

You need to rewrite your fileToQuery function to take an extra argument (perhaps resultCallback) and instead of returning your sql string, you do:

return resultCallback("INSERT IGNORE ....");

You'll then call it like this:

fileToQuery(file,function(query){
  client.query(query, function(err, results) {
    fs.unlink(file, function(err) {
      sendFilesToDB(files);
    });
  });
});

By the way: This is called "continuation passing style" and can be done in any language that supports anonymous functions. What you asked for is called a callable continuation, but not very many languages have them. If you're interested in learning about them you should try picking up scheme.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文