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

时间:2011-05-01 12:05:49

标签: asynchronous node.js

使用nodeJS构建函数时遇到一些问题。它似乎没有返回值,我感觉它是由于函数调用的异步性质。任何帮助都会非常感激!

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

1 个答案:

答案 0 :(得分:4)

fileToQuery返回无效,因为它说:

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

您的返回语句不是从filesToQuery返回,而是从您在其中定义的匿名函数返回。

你需要重写你的fileToQuery函数以获取额外的参数(可能是resultCallback)而不是返回你的sql字符串,你可以这样做:

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

然后你会这样称呼它:

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

顺便说一下:这被称为“延续传递风格”,可以用任何支持匿名功能的语言来完成。您要求的内容称为可调用的延续,但不是很多语言都有。如果你有兴趣了解它们,你应该尝试接受计划。