如何使用 return 来自 promise.all 的数据

how to use and return data from promise.all

我想知道如何在 nodejs express 中使用 javascript 实现 promise.all 和 return 数据。

我有一个辅助函数,相互依赖又相互独立,如何使用promise.all实现并行。

//about.js
var express = require('express');
var router = express.Router();
var helper= require('../helper.js');
router.get('/', function (req, res) {
   helper.getdata().then(data=>{
     helper.getlist(data).then(list=>{
      helper.getResult().then(res=>{
       helper.getall(data).then(params=>{ 
        res.render("about.ejs", {da: JSON.stringify(data), li: JSON.stringify(list),re: JSON.stringify(res), param: JSON.stringify(params)});
      })
    })
  })
})

//helper.js
module.exports.getdata= function (rurl) {
  return new Promise(async function (resolve, reject) {
    try {
      var url_parts = require('url').parse(rurl, true);
      var urlquery = url_parts.query;
      resolve(urlquery);
    }
 catch (err) {
      reject(err);
    }
  })
}


这是一种使用方法Promise.all。它可能会根据您的需要而有所不同,或者如果您更愿意坚持使用 Promise.then 而不是 async/await

//about.js
var express = require('express');
var router = express.Router();
var helper = require('../helper.js');
router.get('/', async(req, res) => {
  const data = await helper.getdata()
  const [list, result, param] = await Promise.all([
    helper.getlist(data),
    helper.getResult(), // if it does not depend of data, it could be load together with data using a Promise.all as well
    helper.getall(data)
  ])

  const renderParam = JSON.stringify({
    da: data,
    li: list,
    re: result,
    param
  })

  res.render("about.ejs", renderParam);
})

//helper.js
module.exports.getdata = function(rurl) {
  return new Promise(function(resolve, reject) {
    try {
      var url_parts = require('url').parse(rurl, true);
      var urlquery = url_parts.query;
      resolve(urlquery);
    } catch (err) {
      reject(err);
    }
  })
}

// or helper shorter
const url = require('url')
module.exports.getData = rurl => new Promise(
  (resolve, reject) => {
    try {
      const {
        query
      } = url.parse(rurl, true);
      resolve(query);
    } catch (err) {
      reject(err);
    }
  }
)