Javascript 承诺。一切都不会发生;不要等待新的承诺来解决
这是使用nodejs和jquery的spa的一部分。getToday函数控制台记录“result:”,所以整个过程应该是控制台记录1,然后是result:,然后是2,但它并不等待getToday完成。输出为1,2,结果Javascript 承诺。一切都不会发生;不要等待新的承诺来解决,javascript,node.js,promise,single-page-application,Javascript,Node.js,Promise,Single Page Application,这是使用nodejs和jquery的spa的一部分。getToday函数控制台记录“result:”,所以整个过程应该是控制台记录1,然后是result:,然后是2,但它并不等待getToday完成。输出为1,2,结果 app.get('/incidents/all', function(req, res){ let data = globals.dataTopdesk; let output = {} Promise.all([ data.length,
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)
})
})
为什么不等待新承诺的解决?如果
getToday
是异步的,并返回一个承诺,则将其添加到链中,而不使用看起来无用的额外承诺包装:
返回getToday()。然后(数据=>{
output.today=数据;
返回输出;
});代码>如果getToday
是异步的并返回一个承诺,则将其添加到链中,而不使用看起来无用的额外承诺进行包装:
返回getToday()。然后(数据=>{
output.today=数据;
返回输出;
});
getToday
是一个承诺吗?你是指一个then()
中的新承诺吗?为什么会这样?答应我,大家都不知道。这不是你给它的承诺。getToday()
中的代码本身就是问题所在。output.today=getToday(db,output)
不会等待任何异步的东西getToday()
所做的事情。getToday是一个异步函数,它等待另一个具有承诺的函数并返回一个对象。Taplar可能已经有了答案。getToday
是一个承诺吗?你是说一个then()中的新承诺吗?为什么会这样?答应我,大家都不知道。这不是你给它的承诺。getToday()
中的代码本身就是问题所在。output.today=getToday(db,output)
不会等待任何异步的东西getToday()
所做的事情。getToday是一个异步函数,它等待另一个具有承诺的函数并返回一个对象。塔普拉可能已经有了答案,这就是答案。非常感谢。我将在4分钟内把它标记为答案。这就成功了。非常感谢。我将在4分钟内把它标为答案。