代码之家  ›  专栏  ›  技术社区  ›  Marlon Abeykoon

为什么async/await不在foreach循环内同步ioredis get方法的执行?

  •  0
  • Marlon Abeykoon  · 技术社区  · 7 年前

    异步/等待方法:

    Ids = ['abc','lmn','xyz']
    
    Ids.forEach(function (resId){
        console.log('inside loop');
        async function operation(){
            var curObj = await redisClient.get('key1');
            console.log('done waiting');
      }
    }
    

    另一个函数的回调方法:

    function operation(cb) {
             redisClient.get('key1', cb);
           }
    operation(function(){
        console.log('inside operation');
    });
    

    我想等到curobj变量设置好并按顺序执行代码以打印“完成等待”。我使用了async/await,但它似乎没有按预期工作。然后我用相同的get方法使用回调。我使用IOREDI库。

    我做错了什么?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Grynets    7 年前

    Async/Wait Appruch应如下所示:

    (async() => {
      const Ids = ['abc','lmn','xyz'];
    
      const operation = async (){
       var curObj = await redisClient.get('key1');
       console.log('done waiting');
      }
    
    
      for (const resId of Ids){
       console.log('inside loop');
       await operation();
      }
    })()
    

    没有 async 在里面 forEach 循环,但可以与 for...of .
    注意,我使用的是IIFE函数,例如如何在没有其他上下文的情况下使用异步/等待。