NodeJS,多个如果可能返回标题(并失败)

时间:2018-05-15 09:15:47

标签: javascript node.js express if-statement

更新了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完成数据库查询。

如何在返回任何语句之前确保数据库查询已完成?

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()。