Как справиться с асинхронным выполнением программы? - PullRequest
0 голосов
/ 05 ноября 2018

Как получить упорядоченное выполнение асинхронных функций, указанных ниже

файл 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, но они тоже не сработали.

1 Ответ

0 голосов
/ 05 ноября 2018

Это то, что я сделал, чтобы получить желаемый результат

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...