Javascript 如何使用带有多个参数的Promise.all?

Javascript 如何使用带有多个参数的Promise.all?,javascript,node.js,promise,Javascript,Node.js,Promise,我刚从Node.js开始。我有这样一个代码,我拿薪水和天数,然后计算你每天可以花的平均钱,直到你拿到下一份薪水(每月5号)。第一个承诺用于验证用户输入,第二个承诺在第一个承诺实现后实际计算结果。下面的代码很好用,但我想使用Promise.all来更深入地理解这个主题 var prompt = require('prompt'); prompt.start(); var promise1 = function(){ return new Promise(function(resolve

我刚从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);
})
var prompt=require('prompt');
prompt.start();
var promise1=函数(){
返回新承诺(功能(解决、拒绝){
prompt.get(['salary','day',函数(err,result){
var x=结果工资;
var y=结果日;
var z=/^[0-9]*$/;
如果(x匹配(z)和y匹配(z))
{
决心(结果);
}
否则{
拒绝(“无效日或工资”);
}
})
})
}
var promise2=函数(x,y){
//console.log('x是'+x);
返回新承诺(功能(解决、拒绝){

如果(y>=1&&y
Promise.all
不是您想要作为参数传递给它的承诺之间存在依赖关系时所需的函数。每当您需要一个承诺中的承诺值来创建下一个承诺时,
Promise.all
不是一个选项。使用
的方式就是如何实现它(但不要调用结果
resolve
)。您也可以使用
async
wait
来实现相同的结果


因为只有第一个承诺有异步代码,所以第二个承诺根本没有必要存在。但是如果您真的希望它是一个承诺,那么就返回
承诺。解决
,而不是
新承诺
承诺。all
不允许您在另一个承诺中使用一个承诺的结果。所有承诺都是立即启动并执行,一旦所有承诺都得到解决,您将得到一个回调。是什么让您认为您可以使用
承诺。这里的所有
?请不要调用
的参数,然后
回调“
解决
”.这是一个结果,不是一个解析函数。谢谢你的回答。是的。所以承诺。当承诺相互独立时,所有都会使用。事实上,就是这样。在这种情况下,它们可以立即执行。