2011-05-01 131 views
0

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

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

回答

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); 
    }); 
    }); 
}); 

顺便说一句:这就是所谓的“延续传递风格”,并且可以支持匿名函数的任何语言来完成。你要求的是叫做的可调用延续,但是没有很多语言有它们。如果你有兴趣了解他们,你应该尝试提取计划。

+0

啊,我想避免这种情况,但我想这就是它完成的方式。我来自一个函数执行的PHP背景,并在继续之前返回。这似乎是不自然的如何嵌套像上面那样。谢谢! – crawf 2011-05-01 12:34:53

+0

函数_did_返回。它只是没有返回*你认为它做了什么,*当*。事实上,PHP支持continuation(因此也延续了传递风格),所以你可以用PHP编写这种方式。 – geocar 2011-05-01 12:47:23

+0

啊,这是有道理的。感谢您的回答!尽管我的代码现在需要进一步调整,因为它不再持续监视... – crawf 2011-05-01 12:59:18