Javascript NodeJS,多个if可能返回头(并且失败)

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) => {

更新了承诺示例。

我正在运行NodeJS,并且在多个
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未定义,它将返回错误-它不应该返回错误。它应该继续下去。