我刚开始使用Node.js.我有这个代码,我拿薪水和天数,然后计算你每天可以花费的平均金额,直到你获得下一个薪水(本月5日)。第一个承诺用于验证用户输入,第二个承诺实际上在第一个承诺完成后计算结果。下面的代码工作正常,但我想使用Promise.all来深入了解该主题。
var prompt = require('prompt');
prompt.start();
var promise1 = function(){
return new Promise(function(resolve,reject){
prompt.get(['salary','day'],function(err,result){
var x = result.salary;
var y = result.day;
var z = /^[0-9]*$/;
if(x.match(z) && y.match(z))
{
resolve(result);
}
else{
reject('invalid day or salary');
}
})
})
}
var promise2 = function(x,y){
//console.log('x is ' + x);
return new Promise(function(resolve,reject){
if(y>=1 && y<5){
var z = x/(5-y);
resolve(z);
}
else if(y<=30 && y>5){
var z = x/(35-y);
resolve(z);
}
else{
reject('day not within range...');
}
})
}
promise1().then(function(resolve){
return promise2(resolve.salary,resolve.day);
}).then(function(resolve){
console.log(resolve);
}).catch(function(fromReject){
console.log(fromReject);
})
答案 0 :(得分:2)
Promise.all
不是您希望作为参数传递给它的promise之间具有依赖关系时所需的函数。每当您需要一个承诺的承诺值来创建下一个承诺时,Promise.all
不是一个选项。使用then
执行此操作的方式是如何完成的(但不要调用结果resolve
)。您也可以使用async
和await
来实现相同目标。
由于只有第一个承诺具有异步代码,所以第二个承诺根本没有必要存在。但如果您真的希望它成为承诺,那么请返回Promise.resolve
,而不是new Promise
。