为啥这个打字稿程序永无止境?

Posted

技术标签:

【中文标题】为啥这个打字稿程序永无止境?【英文标题】:Why is this typescript program never ending?为什么这个打字稿程序永无止境? 【发布时间】:2020-05-06 18:21:24 【问题描述】:

我已经在 typescript 中为 oclif 编写了这个登录命令 (Login.ts)。它应该在cli的登录命令中获取一些信息,然后使用jwt创建一个令牌并将其写入文件。

import Command from '@oclif/command'
import axios from 'axios'
import flags from  '@oclif/command'
const bcrypt = require('bcrypt');
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;
export class LoginCommand extends Command 
  static flags =  
    user: flags.string(dependsOn:['passw']),
    //email: flags.string(dependsOn:['passw'],exlucsive:['user']),
    passw: flags.string()
  

  async run() 
        const flags = this.parse(LoginCommand); 
        var mysql=require('mysql')
        var connection=mysql.createConnection(
            host: 'localhost',
            user: 'root',
            password: 'Vangelis98!',
            database: 'vag'
        );
        await connection.query(`SELECT user,pass,email,quotas FROM users WHERE user=?`,[`$flags.user`], function (err, result, fields) 
                if (err) throw err;
                console.log(`$flags.user`);
                console.log(result[0].pass);
                const password=result[0].pass;
                if(bcrypt.compareSync(`$flags.passw`, password)) 
                    var fs=require('fs');
                    var privateKey = fs.readFileSync('private.key');
                    var jwt=require('jsonwebtoken');
                    var token = jwt.sign(user:`$flags.user`,passw:`$flags.passw`, privateKey,  algorithm: 'RS256' );
                    fs.writeFileSync("temptoken.txt",token);
                 else 
                    console.log("Wrong username or password\n");
                       
         );

  

我正在运行这样的命令文件:

energy Login --user afro --passw whatever12

它运行正常,但它永远不会终止,为什么?我该如何解决这个问题?

【问题讨论】:

在我看来,将 await 与回调一起使用看起来有点时髦。 await 有助于承诺,但我认为它不适用于这样的回调模式。也许尝试从您的代码中删除 asyncawait 并尝试。 【参考方案1】:

我的猜测是数据库connection is not closed 因此程序不会终止。

【讨论】:

以上是关于为啥这个打字稿程序永无止境?的主要内容,如果未能解决你的问题,请参考以下文章

当 /// 引用在“use strict”之后时,为啥打字稿会抱怨?

为啥打字稿抱怨对象必须是扩展类型中的对象

打字稿:为啥类型别名满足约束但相同的接口不满足?

为啥打字稿不显示错误? (反应)

为啥我们在打字稿中使用 HTMLInputElement?

打字稿错误对象可能为空?为啥,如何禁用?