2015-02-03 2 views
0

Я пытаюсь получить водопад работает в Node.js с использованием Async, но я получаю ошибкуНеопределенные «Обратный вызов» с асинхронным Водопад/Node.js

callback (null, articleDataSafe, req); ^ TypeError: undefined is not a function

Код выглядит следующим образом

async.waterfall([ 
         function sanitizeData (articleData, req, callback) { 

           articleDataSafe = sanitizeArticle(articleData); 
           console.log('s1'); 
           callback (null, articleDataSafe, req); 

         }, 

         function _validateData (articleDataSafe, req, callback) { 

           var errors = validateArticle(articleData); 
           var err = null; 
           if(errors.length > 0){ 
            // return error messages back to the browser 
            err = JSON.stringify({'error': errors, "message": "fail"}); 
           }; 
           console.log('s2'); 

           callback (err, articleDataSafe, req); 

         }, 

         function _saveArticle (articleDataSafe, req, callback) { 

           // work out the tags hash 
           var tags = articleDataSafe['tags']; 
           var tagsArray = tags.split(","); 
           tagsArray.sort(); 
           var tagsString = tagsArray.join(); 
           var hashedTags = sha512(tagsString); 
           articleDataSafe['hashedTags'] = hashedTags; 

           // then save the articles 
           var savedArticle = saveArticle(req, articleDataSafe); 

           console.log('s3'); 

           if(!savedArticle){ 
            var err = JSON.stringify({'error': 'notSaveArticle', 'message': 'fail'}); 
           } 

           callback (err, articleDataSafe); 

         }, 

         function _saveTags (articleDataSafe, callback) { 

           var tagsDone = saveTags(articleDataSafe); 

           if(tagsDone.length > 0){ 
            // return error messages back to the browser 
            var err = JSON.stringify({'error': tagsDone, "message": "fail"}); 
           }; 
           console.log('s4'); 

           callback (err, articleDataSafe); 

         }, 

         function _saveTagSets (articleDataSafe, callback) { 

           var tagSetsDone = saveTagSets(data); 

           if(tagSetsDone.length > 0){ 
            // return error messages back to the browser 
            var err = JSON.stringify({'error': errors, "message": "fail"}); 
           }; 
           console.log('s5'); 

           callback (err, articleDataSafe); 

         } 
        ], function (error, success) { 

         var responseMessage = {'error': '', "message": "success"}; 

         if (error) { 
          responseMessage = error; 
         } 

         res.end(JSON.stringify(responseMessage)); 

        }); 

Может ли кто-нибудь объяснить, что происходит не так. Я уже много лет пытаюсь заставить его работать без везения.

Любая помощь будет оценена по достоинству.

Спасибо, Cs1h

+0

Подождите, почему вы используете 'async.waterfall' вообще, когда у вас нет ничего асинхронного? – Bergi

ответ

3

The first function is passed no other argument than the callback. Вам нужно будет начать так:

async.waterfall([ 
    function sanitizeData (callback) { 
//      ^^^^^^^^^^ no articleData, no req 
     articleDataSafe = sanitizeArticle(articleData); 
     console.log('s1'); 
     callback (null, articleDataSafe, req); 
    }, 
    … 

Однако я сомневаюсь, что вам нужен асинхронный вообще.

+0

Спасибо, Берги, это похоже на работу. Мне понадобится позже async для более сложных вопросов, но я хотел сначала использовать что-то более простое. – cs1h

+0

Спасибо @Bergi. Это разрешило небрежную ошибку, с которой я сидел – randomness

Смежные вопросы