2016-06-17 2 views
0

я следующий запрос к API:отправить ответ после асинхронной вызова в цикле

api.get_info(name, function(err, data) { 
    if (err) { 
     return console.log(err); 
    } 
    result.push(data); 
}); 

На этот запрос я получил в ответ только на один продукт, но есть 10 продуктов, на которые должны получить результат от API и отправить в ответ на клиентскую сторону.

Я пытался добавить апи вызов цикла:

app.get('/info', (req, res) => { 
    let products = ["product 1", "product 2", ... "product 10"]; 

    let full_info = []; 

    for (let product of products) { 
     api.get_info(product, function(err, data) { 
      if (err) { 
       return console.log(err); 
      } 
      full_info.push(data); 
     }); 
    } 

    res.json(full_info); 
}); 

Теперь послал ответ, прежде чем получил всю информацию. Как отправить ответ, когда вы получите все данные?

Возможно ли реализовать без асинхронных и обещаний?

+0

Похоже подобное, но я пытаюсь найти решение только с обратными вызовами. Конечно, если это возможно, – zerocoolby

+0

Принятый ответ в этом случае предлагает решение только с обратными вызовами (без отдельной библиотеки). – JohnnyHK

ответ

0

async.js интересный для этого.

В вашем случае:

async.each(products, function (product, callback) { 
    api.getInfo(product, callback); 
}, function (err, datas) { 
    res.json(datas); 
} 
Смежные вопросы