定义http.get()请求中的操作顺序 - 同步/异步问题

时间:2016-08-07 01:39:01

标签: node.js asynchronous get synchronous

我正在检索网址作为网址参数,然后显示地址是否返回状态代码200。问题是,它似乎只在几秒钟之后才能工作 - 我第一次运行它时,代码分配了mystatus'似乎没有正常工作。我觉得我在运行的顺序存在问题,但我不确定如何修复它。

var express = require("express");
var moment = require("moment");
var http = require("http");
var express = require("express");
var moment = require("moment");
var http = require("http");
var app=express();
var mystatus="";

app.get('/new/:name*', function(req,res){

    //detect if name is a URL
    //return output
    http.get("http:"+req.params[0], function(thisres){
        if (thisres.statusCode != 200){
            mystatus = "Could not load";
        }
        else {
            mystatus = "Loaded!";
        }
    }).on('error', function(e){
        console.error(e);
    })
    res.json({url_part1: req.params.name,
        url_part2: req.params[0],
        status: mystatus
        });
})

app.listen(8080, function(){
    console.log("App listening on port 8080")
});

1 个答案:

答案 0 :(得分:0)

您已在承诺中运行代码节点,因此http.getres.json都在同一时间运行,因此无论哪个首先完成它都无关紧要。

res.json响应移动到http.get的承诺正文中,以便在收到回复时发送回复

var express = require("express");
var moment = require("moment");
var http = require("http");
var express = require("express");
var moment = require("moment");
var http = require("http");
var app=express();
var mystatus="";

app.get('/new/:name*', function(req,res){

    //detect if name is a URL
    //return output
    http.get("http:"+req.params[0], function(thisres){
        if (thisres.statusCode != 200){
            mystatus = "Could not load";
        }
        else {
            mystatus = "Loaded!";
        }

        res.json({url_part1: req.params.name,
        url_part2: req.params[0],
        status: mystatus
        });
    }).on('error', function(e){
        console.error(e);
    })
})

app.listen(8080, function(){
    console.log("App listening on port 8080")
});