Javascript NodeJS,多个if可能返回头(并且失败)
更新了承诺示例。 我正在运行NodeJS,并且在多个Javascript NodeJS,多个if可能返回头(并且失败),javascript,node.js,express,if-statement,Javascript,Node.js,Express,If Statement,更新了承诺示例。 我正在运行NodeJS,并且在多个if-语句和return-语句中遇到问题。 我正在尝试使用承诺,这似乎是一种方法 这是我的示例代码: const express = require('express'); const app = express(); const pgPromise = require('pg-promise')(); const db = pgPromise(CONNECTION_STRING); app.use((req, res) => {
if
-语句和return
-语句中遇到问题。
我正在尝试使用承诺
,这似乎是一种方法
这是我的示例代码:
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);
它似乎没有等待Promise2完成数据库查询
如何确保在返回任何语句之前完成数据库查询?由于节点JS异步运行,所以在执行最后一行之前,不会等待input1、Input2、input3完成(返回res.json({error:false});) 您需要使用Promise来处理序列。找到下面的代码
let input1 = new Promise(function (resolve, reject) {
if (typeof req.body.input1 != "undefined") {
// do something
resolve('Success');
} else {
reject('Error');
}
});
let input2 = new Promise(function (resolve, reject) {
if (typeof req.body.input2 != "undefined") {
// do something
resolve('Success');
} else {
reject('Error');
}
});
let input3 = new Promise(function (resolve, reject) {
if (typeof req.body.input3 != "undefined") {
// do something
resolve('Success');
} else {
reject('Error');
}
});
input1.then((value) => {
return res.json({ error: true });
})
.catch((e) => {
input2.then((value) => {
return res.json({ error: true });
})
.catch((e) => {
input3.then((value) => {
return res.json({ error: true });
})
.catch((e) => {
return res.json({ error: false });
})
})
})
如果要异步处理所有输入,请使用promise.all()。promise.all不会停止代码执行,您需要将return语句移动到promise.all回调,并返回promise.all返回的promise
return Promise.all([promise1, promise2]).then(() => {
printResult();
return res.json({ message: message });
});
那个代码不会有那个效果。您需要提供考虑回答此问题的人员,请注意,有三人发布了答案(两人在发表此评论时已被删除)这无法解释问题中的返回语句。还没有得到有用的答案-因此欢迎所有答案。您仍然没有提供一个用于更新整个问题以便更容易理解挑战的答案。“由于Node JS异步运行”-Node.JS不异步运行。有些函数可以
res.json
不是其中之一。似乎无法解决问题-如果input1未定义,它将返回错误-它不应该返回错误。它应该继续下去。