【问题标题】:how to use and return data from promise.all如何从 promise.all 使用和返回数据
【发布时间】:2019-11-13 16:08:01
【问题描述】:

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

我有一个辅助函数,相互依赖和独立,如何使用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);
    }
  })
}


【问题讨论】:

  • require() 是同步的。您不能仅使用Promise 使其异步。 Promise 不会让事情变得异步——它只是一种帮助处理异步函数的设计模式

标签: javascript node.js express async-await es6-promise


【解决方案1】:

这是使用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);
    }
  }
)

【讨论】:

    猜你喜欢
    • 2019-07-20
    • 2020-08-06
    • 2019-02-04
    • 2018-02-20
    • 1970-01-01
    • 2021-04-11
    • 2018-12-05
    • 2021-10-23
    • 2017-02-26
    相关资源
    最近更新 更多