簡體   English   中英

如何等待續集執行findOne

[英]How to wait on sequelize executing a findOne

我有一個使用Sequelize.js的路線

app.get('/api/users/:username', (req, res) => {
  const foundUser = getUserByUsername(req.params.username);
  console.log(`foundUser = ${foundUser}`);
  return res.send(foundUser);
});

getUserByUsername函數如下

const getUserByUsername = username => {
  Viewer.findOne({
    where: {username}
  }).then(response => {
    console.log(response.dataValues);//the object with the data I need
    return response.dataValues;
  });
};

我希望在我的路由中將對象保存在我的const foundUser中,但是似乎我需要等到findOne被執行,因為在我的控制台中,我可以看到foundUser的日志(當時是未定義的)在執行之前函數getUserByUsername

foundUser = undefined
Executing (default): SELECT `id`, `username`, `instakluiten`, `role`, `createdAt`, `updatedAt` FROM `viewers` AS `viewer` WHERE `viewer`.`username` = 'instak' LIMIT 1;
{ id: 19,
  username: 'instak',
  instakluiten: 18550,
  role: 'moderators',
  createdAt: 2016-10-02T16:27:44.000Z,
  updatedAt: 2016-10-09T10:17:40.000Z }

如何確定我的foundUser將使用已找到用戶的數據進行更新?

您必須返回 Sequelize創建的承諾,然后等待其解決。 因此, getUserByUsername變為:

const getUserByUsername = username => {
  return Viewer.findOne({
    where: {username}
  }).then(response => {
    console.log(response.dataValues);//the object with the data I need
    return response.dataValues;
  });
};

並在路線中:

app.get('/api/users/:username', (req, res) => {
  getUserByUsername(req.params.username).then(foundUser => {
    res.send(foundUser);
  });
});

這是因為您需要遵守承諾鏈。 如果您忘記返回它,即使最終解決了Promise,函數也會返回undefined end,它所解析的值永遠不會回到鏈中。

app.get('/api/users/:username', (req, res) => {
getUserByUsername(req.params.username, function(err, result){
const foundUser = result;
console.log(`foundUser = ${foundUser}`);
 res.send(foundUser); 
});

});



const getUserByUsername = function(username, callback) {
Viewer.findOne({
where: {username}
}).then(response => {
console.log(response.dataValues);//the object with the data I need
return callback(null, response.dataValues);
});
};

您可以通過promise或callback避免它

app.get('/api/users/:username', (req, res) => {
  getUserByUsername(req.params.username, function(err, foundUser) {
    if (!err) {
      console.log(`foundUser = ${foundUser}`);
      return res.send(foundUser);
    } else {
      res.send(err)
    }
  });
});



const getUserByUsername = (username, callback) => {
  Viewer.findOne({
    where: {
      username
    }
  }).then(response => {
    console.log(response.dataValues); //the object with the data I need
    return callback(null, response.dataValues);
  });
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM