gpt4 book ai didi

javascript - 在 Node.js 中使用 ES6 Promise 返回空响应

转载 作者:行者123 更新时间:2023-12-02 13:54:36 29 4
gpt4 key购买 nike

如何在 Node.js 中使用 ES6 原生 Promise 调用查询。下面是代码。

let arr= [];
conn.query('select * from table1', (err, b) => {
for (let i = 0; i < b.length; i++) {
console.log(b[i]["id"])
let promiseGetData = new Promise((resolve, reject) => {
conn.query('select * from table2 where id = ?', [b[i]["id"]], (err, ce) => {
if (err) {
const response = {
statusCode: 500,
body: JSON.stringify({
message: err
}),
}
reject(response);
} else {
if (ce.length != 0) {
resolve(ce);
}
}
});
});

promiseGetData .then((data) => {
b[i]['data'] = data;
arr.push(b[i])
}).catch((err) => {
console.log(err);
});
}
console.log(b)
})

当我执行 console.log(b) 时,我看到一个空响应。我不知道我是否以正确的方式使用了 promise ,我认为对于第一个查询,我也应该在 promise 中执行。非常感谢任何帮助

最佳答案

将基于异步回调的函数包装到 Promise 中称为“Promisifying”。

您当然可以使用库来实现此目的,但基本上它的作用是:

const queryAsPromise = function( ...args ) {
return new Promise( function( resolve, reject ) {
try {
conn.query(...args, function( error, result ) {
if ( error ) {
reject( error );
} else {
resolve( result );
}
} );
} catch( error ) {
reject( error );
}
} )
} );

通过执行此操作一次,您将使代码保持干燥,并且您现在可以随时使用该 promise 进行查询:

queryAsPromise('select * from table1')
.then( result => {
return Promise.all(
result.map( b => {
return queryAsPromise('select * from table2 where id = ?', b["id"])
.then( data => b["data"] = data )
} )
)
)
.catch( err => res.send(500) )
.then( console.log )

关于javascript - 在 Node.js 中使用 ES6 Promise 返回空响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40793446/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com