node.js - 如何将多个对象从节点后端发送到 .hbs
问题描述
我目前正在尝试将 2 个对象发送到前端 .hbs 前端。但是我似乎无法弄清楚如何做到这一点,因为我正在使用承诺。
目前,我的想法是我执行 sql 查询,提取国家和组织名称,然后分别发送到地理编码 api,返回然后在相同的 promise 中压缩在一起。但我不确定如何为渲染功能提取这些。
节点
//route for homepage
app.get('/', (req, res) => {
let sql = "SELECT org_name, country_name from places;
let query = conn.query(sql, (err, results) => {
if (err) throw err;
const geoPromise = param => new Promise((resolve, reject) => {
geo.geocode('mapbox.places', param, function(err, geoData) {
if (err) return reject(err);
if (geoData) {
resolve(geoData.features[0])
} else {
reject('No result found');
}
});
});
const promises = results.map(result =>
Promise.all([
geoPromise(result.country_name),
geoPromise(result.org_name)
]));
Promise.all(promises).then((geoLoc, geoBus) => {
res.render('layouts/layout', {
results: JSON.stringify(geoLoc),
businesses: JSON.stringify(geoBus)
});
});
});
});
前端调用
results1 = {{{results}}}
console.log(results1.length)
business1 = {{{businesses}}}
console.log(business1.length)
解决方案
把你包geo.geocode
成一个Promise
const geoPromise = param => new Promise((resolve, reject) => {
geo.geocode('mapbox.places', param, function(err, geoData) {
if (err) return reject(err);
if (geoData) {
resolve(geoData.features[0])
} else {
reject('No result found');
}
});
});
结合两个调用geo.geocode
const promises = results.map(result =>
Promise.all([
geoPromise(result.country_name),
geoPromise(result.org_name)
]));
给他们打电话
Promise.all(promises).then(([geoLoc, geoBus]) => {
res.render('layouts/layout', {
results: JSON.stringify(geoLoc),
businesses: JSON.stringify(geoBus)
});
});
正如 MadWard 的回答所提到的,解构回调的参数Promise.all
是必要的,因为一切都将在第一个参数中。确保您查看他的帖子以获取更多详细信息
推荐阅读
- node.js - NodeJS + mongoDB findOneAndUpdate 数组的数组
- javascript - reactjs中如何在onClick中依次调用两个函数。两个函数都是异步的
- python - Scrapy - 如何将下载的图像保存到文件系统和 S3?
- c++ - C++ 从通用引用中提取实际类型
- python - psycopg2 typeerror:TypeError:字符串格式化期间并非所有参数都转换
- php - 检查数组是否有任何不在(另一个)数组中的键
- php - 如何在 Laravel 数组中获取指定产品
- java - 文件已存在时 Java 中的 FileNotFound 异常
- java - Java 程序如何绑定到 JDK?
- reactjs - 为什么使用 React Router 的参数而不是传递它们?