Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Node.js中使用async/await编写依赖项_Javascript_Node.js_Promise_Async Await - Fatal编程技术网

Javascript 如何在Node.js中使用async/await编写依赖项

Javascript 如何在Node.js中使用async/await编写依赖项,javascript,node.js,promise,async-await,Javascript,Node.js,Promise,Async Await,我在Node.js应用程序中有一个场景 脚本 p1到p5是承诺(在实际代码中,他们称之为数据库或web服务) p1、p2可以立即创建(从请求参数中的数据) p3、p4取决于数据的p1 p5取决于数据的p2 我想确保没有不必要的承诺等待。 这意味着一旦p1解析,就会创建p3和p4 同样地,p2一解析,p5就被创建 已为此创建JSBin: 问题: 这个代码能变得更干净吗 还是更多地使用async/await而少使用Promise语法 有(回调世界)的等价物吗 //无保护 const start

我在Node.js应用程序中有一个场景

脚本
  • p1到p5
    是承诺(在实际代码中,他们称之为数据库或web服务)
  • p1、p2可以立即创建(从请求参数中的数据)
  • p3、p4
    取决于数据的
    p1
  • p5
    取决于数据的
    p2
我想确保没有不必要的承诺等待。
这意味着一旦p1解析,就会创建p3和p4
同样地,p2一解析,p5就被创建

已为此创建JSBin:

问题

  • 这个代码能变得更干净吗
  • 还是更多地使用async/await而少使用Promise语法
  • 有(回调世界)的等价物吗
  • //无保护
    const startTime=Date.now();
    常量日志=(…a)=>{
    让timeDiff=Date.now()-startTime;
    log(timeDiff+':'+a.join(“”));
    };
    const createPromise=(标记,时间)=>{
    日志(标记“已创建”,时间);
    返回新承诺((解决)=>{
    setTimeout(解析,时间);
    })
    .然后(()=>{
    日志(标记“点火”,时间);
    });
    };
    /*
    *情景
    *p1、p2是独立的承诺
    *p3、p4依赖p1获取数据
    *p5依赖p2获取数据
    */
    异步函数fn(){
    设p1=createPromise('p1',200);
    设p2=createPromise('p2',50);
    设p3,p4,p5;
    p1.然后(()=>{
    p3=createPromise('p3',1000);
    p4=createPromise('p4',500);
    });
    p2.然后(()=>{
    p5=createPromise('p5',300);
    });
    等待承诺。所有([p1,p2]);
    日志(“正在等待p3、p4、p5”);
    等待承诺。所有([p3,p4,p5]);
    日志(“所有已解决”);
    }
    fn()
    
    
    JS-Bin
    
    关于第一个问题,我建议您执行以下操作:

    ...
    async function fn() {
      const p1 = createPromise('p1', 200);
      const p2 = createPromise('p2', 50);
      const p3 = p1.then(() => createPromise('p3', 1000));
      const p4 = p1.then(() => createPromise('p4', 500));
      const p5 = p2.then(() => createPromise('p5', 300));
    
      await Promise.all([p3, p4, p5]);
    
      log('All resolved');
    }
    ...
    
    为什么??如果更严格,您的代码可能会导致不必要的问题。想象一下,
    p3=createPromise('p3',1000)抛出错误,这种情况会导致什么结果

    p1.then(() => {
      p3 = createPromise('p3', 1000); // what if this line throws an error?
      p4 = createPromise('p4', 500); // this line will not be excecuted!
    });
    

    如果发生这种情况,您甚至不会创建p4!换句话说,p3不应该与p4有直接关系,最终会影响p4。可以避免使用我的建议。

    关于第一个问题,我建议您执行以下操作:

    ...
    async function fn() {
      const p1 = createPromise('p1', 200);
      const p2 = createPromise('p2', 50);
      const p3 = p1.then(() => createPromise('p3', 1000));
      const p4 = p1.then(() => createPromise('p4', 500));
      const p5 = p2.then(() => createPromise('p5', 300));
    
      await Promise.all([p3, p4, p5]);
    
      log('All resolved');
    }
    ...
    
    为什么??如果更严格,您的代码可能会导致不必要的问题。想象一下,
    p3=createPromise('p3',1000)抛出错误,这种情况会导致什么结果

    p1.then(() => {
      p3 = createPromise('p3', 1000); // what if this line throws an error?
      p4 = createPromise('p4', 500); // this line will not be excecuted!
    });
    

    如果发生这种情况,您甚至不会创建p4!换句话说,p3不应该与p4有直接关系,最终会影响p4。可以避免使用我的建议。

    我喜欢你的建议。它允许我在开始时初始化
    p3、p4、p5
    变量,以便我可以直接等待它们。我不确定是否有错误,我得试着把整个事情都搞清楚。不过,我正在寻找更多的async/await语法或类似的
    async.auto
    。我喜欢你的建议。它允许我在开始时初始化
    p3、p4、p5
    变量,以便我可以直接等待它们。我不确定是否有错误,我得试着把整个事情都搞清楚。不过,我正在寻找更多的async/await语法或类似的
    async.auto