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