Javascript 如何处理程序的异步执行?

Javascript 如何处理程序的异步执行?,javascript,asynchronous,Javascript,Asynchronous,如何获得下面提到的异步函数的有序执行 文件one.js const request = require("request") makerequest = function() { let value = false; request("http://www.google.com", function(err, response, body) { if(err) console.log("Error", err) else

如何获得下面提到的异步函数的有序执行

文件
one.js

const request = require("request")

makerequest = function() {
    let value = false;

    request("http://www.google.com", function(err, response, body) {
        if(err)
            console.log("Error", err)
        else if(response && body)
        {
            console.log("response is valid")
            console.log("body is valid")
        }
        value = true
    })
    return value
}

exports.makerequest = makerequest
const one = require("./one")

post("passed string", function() {
    console.log("one")
    result = one.makerequest()
    console.log("result", result)
    console.log("two")
})

function post(str, callback) {
    console.log(str)
    callback()
}
const request = require("request")

makerequest = function() {
    let value = false;

    return new Promise(function(resolve, reject) {
        request("http://www.google.com", function(err, response, body) {
            if(err)
                console.log("Error", err)
            else if(response && body)
            {
                console.log("response is valid")
                console.log("body is valid")
            }
                value = true
                resolve(value)
        })
    })
}

module.exports = makerequest
const makerequest = require("./one")

post("passed string", async function() {
    console.log("one")
    result = await makerequest()
    console.log("result", result)
    console.log("two")
})

function post(str, callback) {
    console.log(str)
    callback()
}
文件
two.js

const request = require("request")

makerequest = function() {
    let value = false;

    request("http://www.google.com", function(err, response, body) {
        if(err)
            console.log("Error", err)
        else if(response && body)
        {
            console.log("response is valid")
            console.log("body is valid")
        }
        value = true
    })
    return value
}

exports.makerequest = makerequest
const one = require("./one")

post("passed string", function() {
    console.log("one")
    result = one.makerequest()
    console.log("result", result)
    console.log("two")
})

function post(str, callback) {
    console.log(str)
    callback()
}
const request = require("request")

makerequest = function() {
    let value = false;

    return new Promise(function(resolve, reject) {
        request("http://www.google.com", function(err, response, body) {
            if(err)
                console.log("Error", err)
            else if(response && body)
            {
                console.log("response is valid")
                console.log("body is valid")
            }
                value = true
                resolve(value)
        })
    })
}

module.exports = makerequest
const makerequest = require("./one")

post("passed string", async function() {
    console.log("one")
    result = await makerequest()
    console.log("result", result)
    console.log("two")
})

function post(str, callback) {
    console.log(str)
    callback()
}
这就是我得到的结果

passed string
one
result false
two
response is valid
body is valid
这就是我想要得到的结果

passed string
one
response is valid
body is valid
result true
two

我也尝试过使用
async/await
,但也没有成功。

这就是我所做的,以获得所需的输出

one.js

const request = require("request")

makerequest = function() {
    let value = false;

    request("http://www.google.com", function(err, response, body) {
        if(err)
            console.log("Error", err)
        else if(response && body)
        {
            console.log("response is valid")
            console.log("body is valid")
        }
        value = true
    })
    return value
}

exports.makerequest = makerequest
const one = require("./one")

post("passed string", function() {
    console.log("one")
    result = one.makerequest()
    console.log("result", result)
    console.log("two")
})

function post(str, callback) {
    console.log(str)
    callback()
}
const request = require("request")

makerequest = function() {
    let value = false;

    return new Promise(function(resolve, reject) {
        request("http://www.google.com", function(err, response, body) {
            if(err)
                console.log("Error", err)
            else if(response && body)
            {
                console.log("response is valid")
                console.log("body is valid")
            }
                value = true
                resolve(value)
        })
    })
}

module.exports = makerequest
const makerequest = require("./one")

post("passed string", async function() {
    console.log("one")
    result = await makerequest()
    console.log("result", result)
    console.log("two")
})

function post(str, callback) {
    console.log(str)
    callback()
}
two.js

const request = require("request")

makerequest = function() {
    let value = false;

    request("http://www.google.com", function(err, response, body) {
        if(err)
            console.log("Error", err)
        else if(response && body)
        {
            console.log("response is valid")
            console.log("body is valid")
        }
        value = true
    })
    return value
}

exports.makerequest = makerequest
const one = require("./one")

post("passed string", function() {
    console.log("one")
    result = one.makerequest()
    console.log("result", result)
    console.log("two")
})

function post(str, callback) {
    console.log(str)
    callback()
}
const request = require("request")

makerequest = function() {
    let value = false;

    return new Promise(function(resolve, reject) {
        request("http://www.google.com", function(err, response, body) {
            if(err)
                console.log("Error", err)
            else if(response && body)
            {
                console.log("response is valid")
                console.log("body is valid")
            }
                value = true
                resolve(value)
        })
    })
}

module.exports = makerequest
const makerequest = require("./one")

post("passed string", async function() {
    console.log("one")
    result = await makerequest()
    console.log("result", result)
    console.log("two")
})

function post(str, callback) {
    console.log(str)
    callback()
}

然而,有一件事我仍然没有得到。当我编写
resolve(value)
outside
request
函数调用时,承诺的行为不符合预期。对此有什么解释?它仍然在
Promise

的可能副本中,我试图按照答案进行操作,但仍然没有得到答案。请您帮助我了解如何才能达到预期的输出?我知道javascript的异步特性,但我不知道在这种情况下如何使用async/Wait或Promissions。很抱歉,这太宽泛了,因为您给出的代码只是一个假设的示例,您试图理解异步代码是如何工作的。我建议您在处理async/Wait之前先了解承诺。承诺更容易理解,一旦您准备好了,它与async/Wait later兼容。@jered您能回答我在回答中提出的问题吗?因为只有在实际可用时才应该使用最终值调用
resolve()
。如果您在
request()
调用之外调用它,您将在
request()
实际完成其网络请求并检索数据之前同步触发
resolve()
调用。不过,您自己解决问题做得很好:)