嵌套 async/await 是一种反模式吗?

hin*_*ner 2 javascript asynchronous promise reactjs

我有 getAction1、2 和 3 函数,它们在后端 API 服务中执行一些操作。

我需要一个按顺序执行 getAction1、2 和 3 的按钮。

在这个情况下,

这样做是不是更好?(选项1)

apiconsumer.js

export const getAction1 = (param1) => new Promise(
    function (resolve, reject) {
      // DO SOMETHING AND RETURN 'resolve' or 'reject'
    });
export const getAction2 = (param2) => new Promise(
    function (resolve, reject) {
      // DO SOMETHING AND RETURN 'resolve' or 'reject'
    });
export const getAction3 = (param3) => new Promise(
    function (resolve, reject) {
      // DO SOMETHING AND RETURN 'resolve' or 'reject'
    });
Run Code Online (Sandbox Code Playgroud)

按钮.js

const handleOnClick = async (event) => {

    const response1 = await getAction1(param1);
    const response2 = await getAction2(param2);
    const response3 = await getAction3(param3);

// DO SOMETHING...

  };
Run Code Online (Sandbox Code Playgroud)

或者这样做?(选项2)

apiconsumer.js

export const getAction1 = (param1) => new Promise(
    function (resolve, reject) {
      // DO SOMETHING AND RETURN 'resolve' or 'reject'
    });
export const getAction2 = (param2) => new Promise(
    function (resolve, reject) {
      // DO SOMETHING AND RETURN 'resolve' or 'reject'
    });
export const getAction3 = (param3) => new Promise(
    function (resolve, reject) {
      // DO SOMETHING AND RETURN 'resolve' or 'reject'
    });

export const performActions =  async (uData) => {
    const response1 = await getAction1(uData.param1);
    const response2 = await getAction2(uData.param2);
    const response3 = await getAction3(uData.param3);

    };

Run Code Online (Sandbox Code Playgroud)

按钮.js

const handleOnClick = async (event) => {

    const response1 = await performActions(uData);

// DO SOMETHING...

  };
Run Code Online (Sandbox Code Playgroud)

基本上,OPTION.2 创建嵌套的 async/await 函数。

我不确定像上面的 OPTION.2 那样嵌套 async/await 是否是一个好主意。如果这些都不好,你有什么建议?

Joe*_*oyd 5

使用承诺全部

如果结果不互相依赖的话。

await Promise.all([
  getAction1(uData.param1),
  getAction2(uData.param2);,
  getAction3(uData.param3);
])
Run Code Online (Sandbox Code Playgroud)