【发布时间】:2018-12-21 01:12:47
【问题描述】:
这是使用 nodejs 和 jquery 的 spa 的一部分。 getToday 函数控制台记录“结果:”所以整个事情应该控制台记录 1,然后是结果:,然后是 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)
})
})
为什么不等待新的 Promise 解决?
【问题讨论】:
-
getToday是一个承诺吗? -
你的意思是
then()里面的新承诺?为什么会呢? Promise.all 对此一无所知。这不是你给的承诺 -
getToday()中的代码本身就是问题所在。 -
output.today = getToday(db, output)不会等待getToday()所做的任何异步操作。 -
getToday 是一个异步函数,它等待另一个带有承诺的函数并返回一个对象。 Taplar 可能已经有了答案。
标签: javascript node.js promise single-page-application