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

Javascript 如何使用$q异步返回http请求的值(使用typescript),javascript,json,angularjs,typescript,q,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'

我一直在尝试设置一个简单的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;
}
但是我希望它返回我从http请求中获得的json对象,如果我在这里添加一个console.log(result),我可以看到:

似乎我没有正确使用$q系统,但我无法找到返回json对象的正确方法

我在这里尝试了以下示例: 但它仍然无法从reqest返回json对象


谢谢大家!

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


最后随代码返回的对象的
then
属性是一个为承诺注册处理程序的函数,它的使用方式与调用
$.ajax
的结果完全相同。

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


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

因为您返回的是
承诺,即
延迟返回。承诺
您需要在另一端使用承诺,即:

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

PS:由于您返回的是
承诺,即
延迟返回。承诺
您需要在另一端使用承诺,即:

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

PS:与
$相比,更喜欢
$http
(和
$http.get
)ajax

谢谢您的回答!这无疑帮助我解决了问题,(并解决了我真正的问题,那就是缺乏理解),但巴萨拉特的回答似乎是更直接的答案。谢谢你的回答!这无疑帮助我解决了问题(并解决了我真正的问题,那就是缺乏理解),但巴萨拉特的答案似乎是更直接的答案。
getjsonObjAsync().then((result)=>{
    console.log(result);
});