node js mysql查询循环错误

时间:2018-02-13 08:16:20

标签: mysql node.js express for-loop

我正在使用快递,以及我的路线功能。此函数从store表中检索所有商店,然后回调另一个系列函数,该函数循环遍历商店并根据特定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 个答案:

答案 0 :(得分:0)

这是因为值存储在闭包中。当调用回调function(record) {...}时,aa的值已经是3(当异步调用没有返回时它会递增)。因此,为了纠正这个问题,请使用另一个包装此函数的函数并调用它。例如,

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);
        }
    }
}