从Node.js中的另一个js文件调用异步函数

o4hqfura  于 2023-01-16  发布在  Node.js
关注(0)|答案(1)|浏览(173)

基本上,我有几个js文件,file1.js和file2.js包含异步函数(DB get),file3.js将调用file1.js中的async函数并获取返回值,file4.js中的函数将调用file2.js中的async函数获取结果,并调用file3.js函数获取结果,然后处理这两个结果并发送到浏览器UI。模式类似如下。我的问题是file3.js和file4.js是否可以工作?代码结构看起来很糟糕,特别是file4.js,那里有一个“then”hell,有什么好的代码结构吗?
file1.js:

async function func1() {
   ......
   return val1;
}

file2.js:

async function func2() {
   ......
   return val2;
}

file3.js:

const file1 = require('./file1');
function func3() {
   ......
   let func3Val = file1.func1()
     .then(
        function(value) { return value; }
     )
   
   // can func3Val get value above?
   return func3Val + "--hello";
}

file4.js:

const file2 = require('./file2');
const file3 = require('./file3');

const func4= (req, res) => {
   file2.func2().then((ret)=>{
      let test1 = ret;
      ......
      let test2 = file3.func3().then((value) => {
          ......
          res.send([test2 value combined with test1]);
      });
   });

}
ycl3bljg

ycl3bljg1#

我建议使用async/await而不是古老的then/catch
对于方法func4,由于func2的值没有在func3中使用,因此可以使用Promise.all来获得更好的样式和性能:

const file2 = require('./file2');
const file3 = require('./file3');

const func4 = async (req, res) => {
   try {
      const [test1, test2] = await Promise.all([file2.func2(), file3.func3()]);
      res.send([test2 value combined with test1]);
   } catch (error) {
      // handle error
   }
}

func3中的func3Val将是undefined,您还需要将其更改为async/await

相关问题