javascript - 如何将 Promise.all 与多个参数一起使用?

标签 javascript node.js promise

我刚刚开始使用 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)。您还可以使用 asyncawait 来实现相同的目的。

由于只有第一个 Promise 具有异步代码,因此根本没有必要存在第二个 Promise。但如果您确实希望它成为一个 Promise,请返回 Promise.resolve,而不是 new Promise

关于javascript - 如何将 Promise.all 与多个参数一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48841943/

相关文章:

javascript - Highcharts - 图表外的图例定位

node.js - 使用 mongoose.model() 时出现错误 TypeError : Cannot read property 'test' of undefined

javascript - 如何为 Firebase 实现 Node.Js 服务器端事件监听器?

javascript - 如果已定义,为什么 Promise.all() 会触发 Array.prototype.then?

javascript - if 语句中的同步多重 promise

javascript - findReleaseById 与 Promise - NodeJS

javascript - 为什么我需要为 karma 配置指定所有文件,即使它们是用 requirejs 加载的

javascript - JS ES6 : How to give child methods access to their sibblings?

javascript - 返回上一页时出现页面加载消息

javascript - 使用 wget 将下载的文件名设置在不同的目录中