最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Promise不会在节点js中第一次返回

IT培训 admin 10浏览 0评论

Promise不会在节点js中第一次返回

我正在尝试制作一个简单的API,根据我的理解,我必须使用一个Promise,但是Promise无法正确返回。它从上一个请求返回JSON,而不是当前请求。

这是我正在使用的代码。我可能会采用完全错误的方法来解决这个问题,但是由于我是JavaScript新手,所以我无法分辨。

var mysql = require('mysql');

var con = mysql.createConnection({
    My login details are here
});

//create a server object:
http.createServer(function (req, res) {
    try {
        var initializePromise = get_results();
        initializePromise.then(function(result) {
            output = result;
        });

        res.write(output.toString());
    } catch (error) {
        res.write("Something went wrong")
        console.log(error);
    } finally {
        res.end();
    }
}).listen(8080); //the server object listens on port 8080

get_results = function () {
    return new Promise(function (resolve, reject) {
        con.query(
            "SELECT * FROM Links",
            function (err, rows) {
                if (rows === undefined) {
                    reject(new Error("Error rows is undefined"));
                } else {
                    var d = new Date();
                    resolve(d.getSeconds());
                }
            }
        )
    }
    )
}```
回答如下:

承诺异步工作。您将回调传递给已执行的诺言.then 一旦诺言得以解决

在您的情况下,这意味着执行了res.write(output.toString) 之前承诺得以解决。因此,尚未调用output = result

res.write命令放入回调中,您应该获得正确的结果。

Promise不会在节点js中第一次返回

我正在尝试制作一个简单的API,根据我的理解,我必须使用一个Promise,但是Promise无法正确返回。它从上一个请求返回JSON,而不是当前请求。

这是我正在使用的代码。我可能会采用完全错误的方法来解决这个问题,但是由于我是JavaScript新手,所以我无法分辨。

var mysql = require('mysql');

var con = mysql.createConnection({
    My login details are here
});

//create a server object:
http.createServer(function (req, res) {
    try {
        var initializePromise = get_results();
        initializePromise.then(function(result) {
            output = result;
        });

        res.write(output.toString());
    } catch (error) {
        res.write("Something went wrong")
        console.log(error);
    } finally {
        res.end();
    }
}).listen(8080); //the server object listens on port 8080

get_results = function () {
    return new Promise(function (resolve, reject) {
        con.query(
            "SELECT * FROM Links",
            function (err, rows) {
                if (rows === undefined) {
                    reject(new Error("Error rows is undefined"));
                } else {
                    var d = new Date();
                    resolve(d.getSeconds());
                }
            }
        )
    }
    )
}```
回答如下:

承诺异步工作。您将回调传递给已执行的诺言.then 一旦诺言得以解决

在您的情况下,这意味着执行了res.write(output.toString) 之前承诺得以解决。因此,尚未调用output = result

res.write命令放入回调中,您应该获得正确的结果。

发布评论

评论列表 (0)

  1. 暂无评论