我在javascript中有一个调用GET api的方法
var PC;
function GetDetails() {
$.ajax({
type: "GET",
url: Myurl,
success: function (response) {
//console.log(response);
PC= response;
}
});
}
我在名为PC的变量中设置响应,在另一种方法中,我将此称为
function PerformTask()
{
GetDetails();
console.log(PC);
}
在GetDetails方法中console.log(response);可以,但是在PerformTask()console.log(PC)中未定义
据我了解,这是一个异步呼叫,尚未设置PC
我如何使其与下一条语句同步?因为我需要PC的价值才能执行下一组语句
我也尝试了api调用
fetch(Myurl)
.then(resp => resp.json())
.then(resp=> setting variable here) ;
但是它不起作用(可以异步运行)
更新1
return new Promise(function (resolve, reject) {
$.ajax({
type: "GET",
url: Myurl,
success: function (response) {
//console.log(response);;
resolve(response);
},
error: function (err) {
reject(err);
}
});
});
在Performtask()中
GetPropertyDetails()
.then(function (data) {
PC= data;
});
console.log(PC);
但是PC仍未定义
答案 0 :(得分:2)
成功后,您可以调用另一个需要响应的方法。由于调用为ASYNC
,因此该函数将无法获得响应。
var PC;
function GetDetails() {
$.ajax({
type: "GET",
url: Myurl,
success: function (response) {
//console.log(response);
PC= response;
// Your next function
PerformTask(PC);
}
});
}
function PerformTask(pc)
{
GetDetails();
console.log(pc);
}
还有另一种方法,但我认为这是不好的方法
$.ajax({
type: "GET",
url: Myurl,
async:false,
success: function (response) {
//console.log(response);
PC= response;
// Your next function
PerformTask(PC);
}
});
使用promise
=>您可以使用async
和await
function asyncCall() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(5)
}, 2000)
});
}
(async function() {
const result = await asyncCall();
if (result) console.log(result)
})()
希望这对您有所帮助。
答案 1 :(得分:0)
更好的选择是在ajax成功内部调用PerformTask()函数,并将结果传递给PerformTask函数。 即
function GetDetails() {
$.ajax({
type: "GET",
url: Myurl,
success: function (response) {
//console.log(response);
PerformTask(response);
}
});
}