我一直在尝试设置一个简单的promise async结构来从http请求返回json返回的对象,我找不到任何好的例子。我确信我正在做一些可怕的错误,但我无法绕过它。
以下是我的尝试:
getjsonObjAsync(): any {
var deferred: ng.IDeferred<any> = this.$q.defer();
$.ajax({
url: AppSettings.jsonObjUrl,
type: 'get',
})
.then((result) => {
deferred.resolve(result);
})
return deferred.promise;
}
当我调用此方法时,它会返回
Object {then: function, catch: function, finally: function}
catch: function (callback) {
finally: function (callback) {
then: function (callback, errback, progressback) {
__proto__: Object
但是我想让它返回我从http请求中获得的json对象,我可以看到我是否在这里添加了console.log(结果):
})
.then((result) => {
console.log(result)
deferred.resolve(result);
})
我似乎错误地使用$ q系统,但我无法找到返回json对象的正确方法。
我试着按照这里的例子: https://stackoverflow.com/a/23572025/3757782 但它仍然无法从请求
返回json对象谢谢!
答案 0 :(得分:2)
我想你可能误解了承诺是如何运作的。它们不会神奇地将异步操作转换为同步操作,因此除非您想阻止,否则不会从您的方法返回JSON。
您最终使用代码返回的对象的then
属性是一个注册promise的处理程序的函数,它的使用方式与$.ajax
调用的结果完全相同。 / p>
答案 1 :(得分:2)
由于您要返回promise
即return deferred.promise
,您需要在另一端使用承诺,即:
getjsonObjAsync().then((result)=>{
console.log(result);
});
PS:首选$http
(和$http.get
)优先于$.ajax
。