javascript - base64-img 回调不适用于词法范围?
问题描述
我不明白为什么回调不使用 javascript 的词法范围。谁能给我解释一下?
这个库是否强迫我将所有代码放入回调中?https://www.npmjs.com/package/base64-img
我的测试代码:
注意:我没有包含运行服务器和中间件errorHandler的设置代码,因为我觉得这会花费太长时间并且在这个问题上霸道。
const base64Img = require('base64-img');
router.get('/url_to_base64', async (req, res, next) => {
try {
const url = 'https://i.imgur.com/6gMn1RD.png';
let base64;
base64Img.requestBase64(url, function (err, result, body) { // callback()
console.log('BODY', body.slice(0, 30));
base64 = body.slice(0, 30);
console.log('base64_inside_cb', body.slice(0, 30));
});
console.log('base64_outside_cb', typeof base64);
res.send({ message: 'success' });
} catch (err) {
next(err);
}
});
预期输出:
base64_outside_cb string
GET /tests/url_to_base64 200 8.599 ms - 21
BODY data:image/png;base64,iVBORw0K
base64_inside_cb data:image/png;base64,iVBORw0K
实际输出:
base64_outside_cb undefined
GET /tests/url_to_base64 200 8.599 ms - 21
BODY data:image/png;base64,iVBORw0K
base64_inside_cb data:image/png;base64,iVBORw0K
有谁知道我如何base64_outside_cb
在回调之外捕获该字符串?
解决方案
推荐阅读
- python - 使用Python将单行的文本拆分为CSV文件中同一列的多行
- python - 模拟 Tornado AsyncHTTPClient 请求/响应
- java - JDK 11 编译失败,JDK 8 编译正常
- javascript - 当比较字符串时,三等号给出错误的输出,但在整数的情况下,它给出正确的输出
- angular - Angular Mat-multiple-select,从下拉列表中获取数据
- c# - 在实体框架核心中一起实现奇异命名约定和数据注释的正确方法
- java - 线程“main”中出现错误 java.lang.NumberFormatException:对于输入字符串:“”
- ruby - 清除具有所需值的输入
- sql-server - AlwaysOn 故障转移,辅助节点作业失败
- excel - Excel - 如何根据另一列的条件值计算不同列值的总和