node.js - 从 Node.js 中的函数中获取价值
问题描述
我不知道我的问题的正确标题。我只需要一个函数的值,就像 return 但我认为它不一样。我有来自adonisjs框架中控制器的代码片段:
var nmeadata = "";
jsondata.forEach(element => {
var x = element.nmea
var buff = new Buffer(x, 'base64')
zlib.unzip(buff, (err, res) => {
if(err)
{
//
}
else
{
nmeadata += "greed island"
nmeadata += res.toString()
}
})
});
return view.render('admin.index', {
data: datanmea.toJSON(),
nmea: nmeadata
})
我需要nmeadata
从 zlib 函数插入的解压缩字符串数据的结果,然后将其发送到视图。但是,这一次,即使我无法像greed island
我的视图那样显示简单的输出。
谢谢你。
更新
使用承诺后仍然无法正常工作:
class NmeaController {
async index({view})
{
const datanmea = await NmeaModel.all()
const jsondata = datanmea.toJSON()
var promises = [];
var nmeadata = "";
jsondata.forEach(element => {
promises.push(
new Promise(resolve => {
let x = element.nmea
let buff = new Buffer(x, 'base64')
zlib.unzip(buff,
(err, res) => {
if (err) {
//
} else {
nmeadata += "test add text"
// nmeadata += res.toString()
}
//im also try using resolve() and resolve("any text")
resolve(nmeadata);
})
}
)
)
});
await Promise.all(promises);
return view.render('admin.index', {
data: datanmea.toJSON(),
nmea: nmeadata
});
}
2019 年 8 月 22 日更新
我已经尝试过 maksbd19 的解决方案,但仍然无法正常工作
class NmeaController {
async index({view})
{
const datanmea = await NmeaModel.all()
const jsondata = datanmea.toJSON()
var promises = [];
var nmeadata = "";
jsondata.forEach(element => {
promises.push(
new Promise(resolve => {
let x = element.nmea
let buff = new Buffer(x, 'base64')
zlib.unzip(buff,
(err, res) => {
if (err) {
// since you are interested in the text only, so no need to reject here
return resolve("");
}
return resolve("greed island")
})
}
)
)
});
const result = await Promise.all(promises); // this will be an array of results of each promises respectively.
nmeadata = result.join(""); // process the array of result
return view.render('admin.index', {
data: datanmea.toJSON(),
nmea: nmeadata
});
}
}
解决方案
我建议两件事-
- 修改
zlib.unzip
回调函数以正确解析;
(err, res) => {
if (err) {
// since you are interested in the text only, so no need to reject here
return resolve("");
}
return resolve(res.toString())
}
- 从结果中检索最终数据
Promise.all
const result = await Promise.all(promises); // this will be an array of results of each promises respectively.
nmeadata = result.join(""); // process the array of result
在这种方法中,每个承诺都会解决,最后你会得到数组中的预期结果。
推荐阅读
- javascript - 如何为 jQuery 插件的对象文字添加高级样式选项
- python - 1064, "您的 SQL 语法有错误" 插入(另一个)
- python - 为什么 PySerial 脚本使用 115200 波特而不是 19200 波特?
- facebook-ads-api - 列出来自视频 ID 的所有广告视频
- psql - 如何定位 /etc/postgresql/10/main/pg_hba.conf
- c# - 将项目列表分配给另一个列表 Linq 中的特定属性
- ios - 如何提高旧 IPAD 应用程序的响应时间
- python-3.x - 非零退出代码
- python - 如何根据列值将数据框中的单行分成多行?
- bash - 如何 git checkout 来自与特定模式匹配的另一个分支的所有文件?