如何访问外部变量然后承诺函数?

时间:2018-05-09 09:23:48

标签: javascript node.js bash sequelize.js

我在我的节点js应用程序中使用了Sequelize和mysql数据库。我想从db中获取值并传入bash脚本,考虑从db获取以下代码电子邮件并将其存储在变量中,但我无法在函数外部访问

desc users;
+------------------+--------------+------+-----+---------+----------------+
| Field            | Type         | Null | Key | Default | Extra          |
+------------------+--------------+------+-----+---------+----------------+
| id               | int(11)      | NO   | PRI | NULL    | auto_increment |
| name             | varchar(255) | YES  |     | NULL    |                |
| value            | varchar(255) | YES  |     | NULL    |                |
| created_at       | datetime     | NO   |     | NULL    |                |
| updated_at       | datetime     | NO   |     | NULL    |                |
+------------------+--------------+------+-----+---------+----------------+
6 rows in set (0.24 sec)

代码:

User.findOne({where: {name: 'name'}}).then(function(user) {
  var name = user.value
});

User.findOne({where: {name: 'email'}}).then(function(user) {
  var email = user.value
});

User.findOne({where: {name: 'age'}}).then(function(user) {
  var value = user.value
});

var child = exec('bash user.sh name age email') 

如何在节点js中的函数之外访问变量(名称,电子邮件,年龄)?

3 个答案:

答案 0 :(得分:0)

var child = exec('bash user.sh email') 
User.findOne({where: {name: 'usr1'}}).then(function(user) {
  var email = user.email;
  console.log(child);
},child);

答案 1 :(得分:0)

数据库查询以异步方式运行,因此,如果要使用查询中的任何结果,则必须在其中编写该代码。

例如 -

User.findOne({where: {name: 'usr1'}})
  .then(function(user) {
    // Do your stuff here.
    var email = user.email;
    var child = exec('bash user.sh email');
  });

答案 2 :(得分:0)

最直观的解决方案是使用async await

(async () => {
   const email = await User.findOne({where: {name: 'usr1'}});

   const child = exec('bash user.sh email');
})();