提问人:nordictelecom 提问时间:9/10/2021 最后编辑:nordictelecom 更新时间:9/10/2021 访问量:137
如何进行类似于$.ajax()的同步$http()请求?
How to make synchronous $http() requests similar to $.ajax()?
问:
我正在发出同步请求,即我总是设置 .{async: false}
我的问题是,虽然jQuery返回我希望它返回的任何响应数据,但AngularJs返回了一个承诺,这在我看来是一个很大的痛苦。$.ajax()
$http()
下面,有一些代码可以演示我的问题。
这是jQuery:
// Library for sending $.ajax requests
Core.libs.prototype.send = function(...) {
var options = {
async: false,
// ...
};
return $.ajax(options).done(function(data) {
return data;
});
}
// Here I make requests
let rest = Core.libs.rest(...); // Get the library
let myVar = rest.send(...); // Make the request
console.log(myVar); // This returns an array from DB: [apple, orange] which is OK
这就是 AngularJS:
// Library for sending $http requests
Core.libs.prototype.send = function(...) {
var options = {
async: false,
// ...
};
return $http(options).then(function(response) {
return response.data;
}, function(err) {
return err;
});
}
// Here I make requests
let rest = Core.libs.rest(...); // Get the library
let myVar = rest.send(...); // Make the request
console.log(myVar); // This returns a PROMISE which is not what I want
有没有办法修改以返回实际数据而不是承诺?Core.libs.prototype.send
我想避免修改库方法以外的任何其他内容。
我不想要这个解决方案,因为那样我就必须在代码中替换它:
let rest = Core.libs.rest(...); // Get the library
let myVar = rest.send(...).then(data => data); // Make the request
console.log(myVar); // This returns [apple, orange] but I don't want this solution
我也试过这个,但它没有按预期工作:
// Library for sending $http requests
Core.libs.prototype.send = async function(...) {
var options = {
// ...
};
let res = await $http(options).then(function(response) {
return response.data;
}, function(err) {
return err;
});
return res;
}
// Here I make requests
let rest = Core.libs.rest(...); // Get the library
let myVar = rest.send(...); // Make the request
console.log(myVar); // This still returns a PROMISE. Why?
答:
0赞
Kevin Le - Khnle
9/10/2021
#1
您应该接受 promise/async await,但这不是问题的重点。为了实现你想要的,你可以使用符号或子句来调用,但不能一起调用:async/await
then()
// Library for sending $http requests
Core.libs.prototype.send = async function(...) {
var options = {
// ...
};
try {
const response = await $http(options);
return response.data;
} catch (err) {
return err;
}
}
评论
async
await
.then()