Search code examples
javascriptnode.jsexpressasync-awaites6-promise

how to use and return data from promise.all


I would like to know how to implement promise.all and return data using javascript in nodejs express.

I have a helper function , which is dependent and independent of each other, how to use promise.all to make parallel.

//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);
    }
  })
}



Solution

  • This is one way to use Promise.all. It may vary depending on your needs or if you prefer to stick with Promise.then instead of 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);
        }
      }
    )