как использовать и вернуть данные из обещания. все - PullRequest
0 голосов
/ 03 июля 2019

Я хотел бы знать, как реализовать promise и все данные, используя javascript в выражении nodejs.

У меня есть вспомогательная функция, которая зависит и не зависит друг от друга, как использовать 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);
    }
  })
}


1 Ответ

0 голосов
/ 03 июля 2019

Это один из способов использования 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);
    }
  }
)
...