nodeJS ожидает возврата функции перед продолжением - PullRequest
0 голосов
/ 01 мая 2011

Просто возникают некоторые проблемы при построении функции с использованием nodeJS. Кажется, оно не возвращает значение, и я чувствую, что это связано с асинхронной природой вызова функции. Любая помощь будет очень признательна!

sendFilesToDB отправляет массив (из fs.readdir) файлов для обработки. Содержимое файлов используется для построения запроса SQL. После успешной вставки файл удаляется. Но функция fileToQuery вообще не возвращает строку (выдает ошибку «Аргумент должен быть строкой»).

1 Ответ

4 голосов
/ 01 мая 2011

fileToQuery возвращает void, потому что оно говорит:

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

Кстати: это называется "стиль передачи продолжения" и может быть выполнено на любом языке, который поддерживает анонимные функции.То, что вы просили, называется вызываемым продолжением , но не во многих языках они есть.Если вам интересно узнать о них, попробуйте подобрать схему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...