Promise.all не ждет новых обещаний, чтобы решить - PullRequest
0 голосов
/ 20 декабря 2018

Это часть spa, которая использует nodejs и jquery.Консоль функции getToday записывает в журнал «result:», поэтому все это должно записать в журнал log 1, затем result:, затем 2, но не ожидает завершения getToday.Результат - 1, 2, результат.

app.get('/incidents/all', function(req, res){
    let data = globals.dataTopdesk;
    let output = {}
    Promise.all([
        data.length,
        calculateProcessingStatus(data),
        calculateOnHold(data),
        calculateOpen(data),
        calculateStatus(data),
        calculateCallType(data);
    ])
    .then(function(values) {
        output.all = values[0]
        output.processingStatus = values[1],
        output.onHold = values[2],
        output.open = values[3],
        output.status = values[4],
        output.callType = values[5]
        return output;
    })
    .then(function(output) {
        console.log('1')
        return new Promise(resolve=> {
            output.today = getToday(db, output)
            resolve(output);
        })
    })
    .then(function(output) {
        console.log('2')
        res.send(output)
    })
    .catch (function(err) {
        res.send('failed: ' + err)
    })
})

Почему это не ожидает разрешения нового Обещания?

1 Ответ

0 голосов
/ 20 декабря 2018

Если getToday является асинхронным и возвращает себе обещание, добавьте его в цепочку без добавления дополнительного обещания, которое выглядит бесполезным:

  return getToday().then(data => {
    output.today = data;
    return output;
  });
...