Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法获取对象值并在类中定义常量和静态变量_Javascript_Jquery_Node.js_Ecmascript 6_Koa - Fatal编程技术网

Javascript 无法获取对象值并在类中定义常量和静态变量

Javascript 无法获取对象值并在类中定义常量和静态变量,javascript,jquery,node.js,ecmascript-6,koa,Javascript,Jquery,Node.js,Ecmascript 6,Koa,我有以下代码: 'use strict'; const Request = require('request'); class CryptoKetHandlers { static async coins(ctx) { try { var CONTENT_TYPE = 'application/json'; console.log(`## Hitting cryptoket coins api for coins li

我有以下代码:

'use strict';

const Request = require('request');

class CryptoKetHandlers {

    static async coins(ctx) {
        try {
            var CONTENT_TYPE = 'application/json';
            console.log(`## Hitting cryptoket coins api for coins list ...`);
            var res = await Request.get({
                url: 'https://api.cryptoket.io/info/currencies',
                headers: {
                    'Content-Type': CONTENT_TYPE,
                }
            }, (err, res, body) => {
                //console.log(`Inside response ... res: ${res} err: ${err} body: ${body}`);
                if (err) {
                    console.log(`#### ERROR :: API RESP :: CryptoKetHandlers :: coins :: exception :: ${err}`);
                    ctx.throw(500);
                } else {
                    let res = {};
                    res.body = body;
                    res.status = 200;
                    return res;
                }
            });
        } catch (ex) {
            console.log(`#### ERROR :: CryptoKetHandlers :: coins :: exception :: ${ex}`);
            ctx.throw(500);
        }
        console.log(`######### Final Response :: status - ${res.status} body - ${res.body} res :: ${res}`);
        ctx.body = res;
        ctx.status = 200;
    }

}

module.exports = CryptoKetHandlers;

我从java背景和新到膝关节炎和NoDEJs,想知道我是否可以实现以下的事情:

  • 为什么res.status和res.body总是返回未定义
  • 如何将CONTENT_TYPE声明为类变量应为const&static
  • 我们希望实现的是:

    • 从Request.get和
      在其他地方处理它(在另一个类函数中)

      • 将所有可重用变量类设置为级别,这样就不需要再次定义
      • 如果您有一些建议,使我的代码更加健壮和干净
    我通过谷歌搜索尝试了各种方法,但没有成功,所以在这里提问

    提前谢谢

  • 为什么res.status和res.body总是返回未定义
  • 首先,
    Request.get()

    wait表达式导致异步函数执行暂停,直到解决了一个承诺(该承诺已实现或被拒绝),并在实现后恢复异步函数的执行恢复时,等待表达式的值是已兑现承诺的值。

    其次,您意外地将返回值
    res
    替换为
    (err,res,body)=>{}
    中的另一个
    res
    。相反,我们可以将返回值作为普通对象返回

    做出这些改变

    'use strict';
    
    let request = require('request');
    
    const CONTENT_TYPE = 'application/json';
    
    function makeRequest() {
      return new Promise((resolve, reject) => {
        request.get({
          url: 'https://api.cryptoket.io/info/currencies',
          headers: {
            'Content-Type': CONTENT_TYPE,
          }
        }, (err, res, body) => {
          if (err) {
            console.log(`#### ERROR :: API RESP :: CryptoKetHandlers :: coins :: exception :: ${err}`);
            return reject(err);
          }
    
          // return as object
          return resolve({ 
            body: body,
            status: 200
          });
        });
      });
    }
    
    class CryptoKetHandlers {
    
      static async coins(ctx) {
        try {
          console.log(`## Hitting cryptoket coins api for coins list ...`);
          let res = await makeRequest();
          console.log(`######### Final Response :: status - ${res.status} body - ${res.body} res :: ${res}`);
        } catch (ex) {
          console.log(`#### ERROR :: CryptoKetHandlers :: coins :: exception :: ${ex}`);
        }
      }
    
    }
    
    因为我将
    var
    替换为
    let
    。我已将最终日志记录移到
    try
    块中

  • 如何将CONTENT_TYPE声明为类变量应为const&static

  • 有关建议现正进行中。您可以查看更多信息。

    @ShivangAgarwal这是主观的;)