更新了Promise示例。
我正在运行NodeJS,并且遇到多个if
语句和return
语句的问题。
我正试图使用Promise
,这似乎是一种可行的方式。
这是我的示例代码:
const express = require('express');
const app = express();
const pgPromise = require('pg-promise')();
const db = pgPromise(CONNECTION_STRING);
app.use((req, res) => {
var message = "";
promise1 = new Promise((resolve, reject) => {
message += "promise1";
if (false) {
reject(message);
}
});
promise2 = new Promise((resolve, reject) => {
if (true) {
db.one('SELECT 1')
.then(row => {
message += " promise2";
resolve(message);
})
.catch(err => {
message += " error";
reject(message);
});
}
});
var printResult = (results) => {console.log("Results = ", results, "message = ", message)}
Promise.all([promise1, promise2]).then(printResult);
return res.json({ message: message });
});
app.listen(3000);
似乎没有等待Promise 2完成数据库查询。
如何在返回任何语句之前确保数据库查询已完成?
答案 0 :(得分:0)
代码执行不会在Promise.all上停止,您需要将return语句移动到Promise.all回调,并返回Promise.all返回的Promise。
return Promise.all([promise1, promise2]).then(() => {
printResult();
return res.json({ message: message });
});
答案 1 :(得分:-1)
由于Node JS是异步运行的,因此它不会在执行最后一行之前等待input1,inpu2,input3完成(返回res.json({error:false});)。
您需要使用Promise来处理序列。找到下面的代码。
field1^(field2)
如果要异步处理所有输入,请使用promise.all()。