javascript - 无法获取对象值并在类中定义常量和静态变量
问题描述
我有以下代码:
'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 背景,是 koa 和 nodejs 的新手,所以想知道如何才能实现以下目标:
- 为什么 res.status 和 res.body 总是返回 undefined?
- 如何将 CONTENT_TYPE 声明为类变量应该是 const & static?
想要达到的是:
从 Request.get 返回所有这些 err、res、body 参数并
在其他地方(在另一个类函数中)处理它。- 使所有可重用的变量类级别,这样就不需要一次又一次地定义。
- 如果你有一些建议可以让我的代码更健壮、更简洁。
我通过谷歌搜索尝试了各种方法,但没有成功,所以在这里问。
提前致谢。
解决方案
- 为什么 res.status 和 res.body 总是返回 undefined?
首先,Request.get()
应该返回一个Promise
工作为await
工作。
await 表达式导致异步函数执行暂停,直到 Promise 被解决,即被履行或拒绝,并在履行后恢复异步函数的执行。恢复时,await 表达式的值是已实现的 Promise 的值。
其次,您不小心将返回值res
替换res
为(err, res, body) => {}
. 相反,我们可以将返回值作为普通对象返回。
做出这些改变,
'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?
目前正在对此提出建议。您可以查看ES6 类变量替代项以获取更多信息。
推荐阅读
- linux - 如何在linux中检查日期是否更改
- elasticsearch - 如果作者姓名不是文档ID,如何在多个类别中查找同一作者写作的记录
- ruby-on-rails - 谷歌omniauth rails与设计身份验证失败
- gitkraken - 让 GitKraken 忘记 GitHub 凭据
- postgresql - 复合外键没有唯一约束,PostgreSQL
- php - Wordpress 分页无法正确显示
- jfoenix - 使用按钮的 JFoenix 对话框
- python - 有没有办法获取使用 MaxAbsScaler 和 OneHotEncoder 处理的特征名称以绘制 Shapley 值?
- r - 在 R 中计算区域统计数据时,exactextract 是否会走捷径并牺牲准确性?
- javascript - 如何从服务人员发送通知