2015-12-28 3 views
0

У меня есть функции в другом месте (это обычная функция, он будет использовать много места. Итак, я попытался вызвать функцию, используя асинхронную параллель, но ее не работает. I прикрепил мой код следующий: Lузел js + асинхронный параллельный + метод вызова функции не работает

var userId = 33; 

async.parallel({ 
     video(userId, callback) { 
      callback(null, callback); 
     }, 
     video1(userId, callback) { 
      callback(null, callback); 
     } 
    }, function(err, results) { 
     console.log(results); 
    }); 



    function video (userId, callback) { 
     client.query("select youtube_id,title,id,thumbnail,search_item from resource order by random() limit 1 ", function(err, video) { 
      callback(err, video); 
     }); 

    } 

    function video1(userId, callback) { 
      client.query("select youtube_id,title,id,thumbnail,search_item from resource1 order by random() limit 1 ", function(err, video1) { 
       callback(err, video1); 
      }); 

     } 
+1

Недействительный JavaScript. Что означает «имя функции: функция»? –

+0

Извините, меня уже используют как var videofunction = {video: function() {}, video1: function() {...}}; Поэтому я скопировал этот код и вставлял его. Теперь я изменил – RSKMR

ответ

0

синтаксис {fnName()} это объявление функции вы хотите использовать вызов функции ... на самом деле вы можете просто использовать async.parallel({video, video1}, (err, results) => console.log(results) для достижения того же эффекта ... кроме того, что вы. также необходимо передать в userId.Так что вы на самом деле собираетесь вызывать функцию, а не объявить:

async.parallel([ 
    callback => video(userId, callback), 
]); 
+0

. Я попробовал следующее: ** * async.parallel ([ callback = globaldetails.video (userId, callback), ], function (err, results) { console.log (err); console .log (результаты); }); \t *** но его не работает – RSKMR

0

Вы должны передавать ссылки функции на async.parallel() и вам нужно передать массив, а не объект. Вы хотите, чтобы код, чтобы иметь такую ​​форму:

async.parallel([fn1, fn2], finalCallback); 

ВИДЕТЬ async.parallel() doc here конкретные примеры синтаксиса вы хотите использовать.

Где fn1, fn2 и finalCallback все ссылки на функции, которые могут быть вызваны с помощью async.parallel() инфраструктуры, а не то, что вы называете себя.

Измените код следующим образом:

async.parallel([ 
    function(callback) { 
     client.query("select youtube_id,title,id,thumbnail,search_item from resource order by random() limit 1 ", function(err, video) { 
      callback(err, video); 
     }), 
    }, 
    function(callback) { 
     client.query("select youtube_id,title,id,thumbnail,search_item from resource order by random() limit 1 ", function(err, video1) { 
      callback(err, video1); 
     }); 
    } 
], function(err, results) { 
     console.log(results); 
}); 

Предположительно, два ваших запросов к базе данных должны быть разными каким-то образом (ваш код показал им одинаковые).

Если ваши функции уже определены где-то, вы можете передать анонимную ссылку на функцию, которая их вызовет. Вам нужно сделать это, если ваши функции не имеют точного соглашения о звонках, которое требуется async.parallel(). Вы можете сделать это вот так:

async.parallel([function(callback) { 
      video(userId, callback); 
     }, function(callback) { 
      video1(userId, callback); 
     }], function(err, results) { 
     console.log(results); 
}); 
+0

Я ожидаю ответа, как получить доступ к значению функции с помощью async.parrllel, потому что функция video и video1 использует много мест. – RSKMR

+0

@RSKMR - Я добавил пример того, как вы бы назвали функции, которые уже определены. Вы также должны увидеть это из асинхронных примеров в своем документе. – jfriend00

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