在 http.get() 请求中定义操作顺序 - sync/async 问题

Defining the order of operations in an http.get() request - sync/async issue

我正在检索作为 URL 参数的网址,然后显示地址 returns 是否为状态代码 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")
});

你是 运行 你在 promise 中的代码节点,所以 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")
});