如何使用$ q返回http请求的值Async(使用typescript)

时间:2014-07-11 08:44:45

标签: javascript json angularjs typescript q

我一直在尝试设置一个简单的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对象

谢谢!

2 个答案:

答案 0 :(得分:2)

我想你可能误解了承诺是如何运作的。它们不会神奇地将异步操作转换为同步操作,因此除非您想阻止,否则不会从您的方法返回JSON。

您最终使用代码返回的对象的then属性是一个注册promise的处理程序的函数,它的使用方式与$.ajax调用的结果完全相同。 / p>

答案 1 :(得分:2)

由于您要返回promisereturn deferred.promise,您需要在另一端使用承诺,即:

getjsonObjAsync().then((result)=>{
    console.log(result);
});

PS:首选$http(和$http.get)优先于$.ajax