节点js mysql查询循环错误

By simon at 2018-02-28 • 0人收藏 • 22人看过

我使用快递和我的路线功能。这个函数检索所有 从商店表中存储,然后回调另一个series功能,那 函数循环遍历商店并从另一个表中查找国家/地区 根据特定的StoreId。错误是

    router.get('/get-data', function(req, res, next) {
          var stores = [];
async.series([
    function(callback){
    // running mysql query here, then assigning record to stores
      stores = record;
      callback();          
    },
    function(callback)
    {
      async.forEachOf(stores, function(value, key, callback) {
        var Store = stores[key].StoreId;
        Mysql.query(query + Store)
          .then(myCallback(key))
          .catch(function(err)
          {
            return res.send({'success': false});
          });
      })
      callback();
      function myCallback(index)
      {
        return function(record)
        {
          console.log(index); //okhere
          if(record)
          {
            stores[index]['countries'] = record;
            console.log(stores); // store has countires
          }
        }
      }
    },
    function(callback)
    {
      return res.send({'success': stores}); //return store without countries
    },
]);

        });

1 个回复 | 最后更新于 2018-02-28
2018-02-28   #1

这是因为值存储在闭包中。回拨时 function(record) {...}被调用,aa的值已经是3(即t时增加 异步调用没有返回)。所以为了纠正这个问题,使用另一个函数 包装这个函数and电话那。例如,

Mysql.query(query + Store)
    .then(myCallback(aa))


// Function that returns a function that'll
function myCallback(currentAa) {
    return function(record){
        if(record) {
            console.log(currentAa);
        }
    }
}

登录后方可回帖

Loading...