简体   繁体   中英

How to access variable outside then promise function?

I have used Sequelize with mysql database in my node js application. I want to fetch the value from the db and passed in to the bash script, consider the following code email is fetched from db and stored it in variable but I couldn't access outside of then function

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)

code:

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') 

How to access variables (name, email, age) outside then function in node js?

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

The database query runs asynchronously, So if you want to use any result from the query, you must write that code inside then.

For example -

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

The most intuitive solution would be to use async await

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM