Javascript 同步运行功能
如何使requestAddress函数同步运行?我应该创建两个这样的函数并使用回调吗?我将如何进行回调?我似乎不明白如何处理这个案子Javascript 同步运行功能,javascript,node.js,request,Javascript,Node.js,Request,如何使requestAddress函数同步运行?我应该创建两个这样的函数并使用回调吗?我将如何进行回调?我似乎不明白如何处理这个案子 function requestAddress(urlCombined) { request(urlCombined, function (error, response, body) { a = JSON.parse(body); c = addressInfo.status; }); } function
function requestAddress(urlCombined) {
request(urlCombined, function (error, response, body) {
a = JSON.parse(body);
c = addressInfo.status;
});
}
function isValid() {
// Retrieve address from input
addressGet = $('#address').val();
// Combine url to get address's information
var urlCombined = 'websitehere' + something;
requestAddress(urlCombined);
//do something
if (condition met) {
return true;
} else {
return false;
}
}
if (isValid()) {
do something
}
您可以向requestAddress函数发送回调函数,并在请求完成后调用它。根据需要将参数发送回它-我已经在isValid中创建了一个匿名回调函数,但如果您愿意,它可以是一个单独命名的函数
function requestAddress(urlCombined, callback) {
request(urlCombined, function (error, response, body) {
a = JSON.parse(body);
c = addressInfo.status;
callback(error, response, body);
});
}
function isValid() {
// Retrieve address from input
addressGet = $('#address').val();
// Combine url to get address's information
var urlCombined = 'websitehere' + something;
requestAddress(urlCombined, (error, response, body) => {
//do something
if (condition met) {
return true;
} else {
return false;
}
});
}
if (isValid()) {
do something
}
您可以按照自己的想法,尝试通过两次回调来解决此问题 或者试试新语法async/await 若请求是异步的,那个么就不是了。无论您创建了多少函数,您都无法将异步结果转换为同步结果。但是您可以更改requestAddress以接受第二个参数,即回调函数,然后可以在函数error、response、body{function中调用该函数。
function requestAddress() {
return new Promise((resolve, reject) => {
request(XXX,() =>{
// .....
resolve(c)
})
})
}
async function isValid () {
const res = await requestAddress(XXX)
if () {} else {}
}