首页 > 解决方案 > 如何处理程序的异步执行?

问题描述

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

文件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

文件two.js

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

这是我得到的结果

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,但它们也没有成功。

标签: javascriptasynchronous

解决方案


这就是我为获得所需输出所做的事情

one.js

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

two.js

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)外部 request函数调用时,promise 不会以预期的方式运行。对此有何解释?它还在里面Promise


推荐阅读