【发布时间】:2020-05-19 17:12:50
【问题描述】:
已修复:<%- locals.devices -%>
所以,正如标题中所说,我想要实现的是发送一个来自 promises 的 json 对象数组。
const switch_p = new Promise(function (resolve, reject) {
conn.query('SELECT * FROM switch', (err, switch_data) => {
if (err) throw err;
resolve(switch_data);
});
});
const ap_p = new Promise etc..
...
...
resolve(ap_data);
const server_p = new Promise etc..
...
...
resolve(server_data);
const router_p = new Promise etc..
...
...
resolve(router_data);
这是我想从中获取价值并在之后呈现它们的 4 个承诺。
Promises.all 函数:-我尝试了更多渲染值的案例,但每次都没有成功。 这是最后一次尝试:
Promise.all([switch_p, ap_p, server_p, router_p]).then(values => {
const responses = values.map(response => values)
return Promise.all(responses)
}).then(responses => {
console.log(responses);
data = responses
console.log(data); // here its shows that data has content
res.render('admin-panel', {
layout: 'layoutAdmin',
locals: {_id: sess_id, uname: sess_uname, rol: sess_rol, devices: data}
});
});
鉴于我只是尝试显示来自设备 () 的内容,我知道它会是这样的:
[ [ [Object],
[Object],
[Object],
........
但它说“设备未定义”..我不知道为什么。 此外,如果有一个解决方案可以在不破坏多个函数中的代码的情况下做到这一点,那将是很酷的。
>>>>>>>>>>>>
让我们暂时忘记 ap_p 承诺。
这是 Promise 函数:
const switch_p = new Promise(function (resolve, reject) {
conn.query('SELECT * FROM switch', (err, switch_data) => {
if (err) reject(err)
else resolve(switch_data);
});
});
const server_p = new Promise(function (resolve, reject) {
conn.query('SELECT * FROM server', (err, server_data) => {
if (err) reject(err)
else resolve(server_data);
});
});
const router_p = new Promise(function (resolve, reject) {
conn.query('SELECT * FROM router', (err, router_data) => {
if (err) reject(err)
else resolve(router_data);
});
});
promise all 函数,虽然我不知道我是否以一种好的方式处理了错误..
Promise.all([switch_p, server_p, router_p]).then(responses => {
console.log(responses);
res.render('admin-panel', {
'layout': 'layoutAdmin',
'locals': {'_id': sess_id, 'uname': sess_uname, 'rol': sess_rol, 'devices': responses}
});
})
.catch(function (error) {
console.log(error);
throw (error);
});
console.log(responses) 工作正常,我得到的单个错误仍然是“未定义设备”。
【问题讨论】:
-
用
if (err) reject(err);替换if (err) throw err; -
const responses = values.map(response => values) return Promise.all(responses)对我来说没有任何意义。你想在哪里实现呢? -
什么是
conn.query?它已经返回承诺的可能性很高。 -
@Bergi 我第一次尝试像 Roamer 那样做,我的意思是直接从 promise.all 渲染值,但没有成功,所以我尝试将渲染函数放入 promise (以避免异步执行)。 //// conn是我的mysql连接,query只是我从表中获取数据的函数。
标签: javascript node.js promise