我刚刚开始使用 Node.js。我有这段代码,其中我获取工资和天数,然后计算您每天可以花费的平均金额,直到您获得下一份工资(每月 5 日)。第一个 Promise 用于验证用户输入,第二个 Promise 在第一个 Promise 履行后实际计算结果。下面的代码工作正常,但我想使用 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);
})
最佳答案
当您打算作为参数传递给 Promise.all 的 Promise 之间存在依赖关系时,
Promise.all
不是您需要的函数。每当您需要一个 promise 的 promise 值来创建下一个 promise 时,Promise.all
就不是一个选择。使用 then
的方式就是它的完成方式(但不要调用结果 resolve
)。您还可以使用 async
和 await
来实现相同的目的。
由于只有第一个 Promise 具有异步代码,因此根本没有必要存在第二个 Promise。但如果您确实希望它成为一个 Promise,请返回 Promise.resolve
,而不是 new Promise
。
关于javascript - 如何将 Promise.all 与多个参数一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48841943/