Javascript 如何使用$q异步返回http请求的值(使用typescript)
我一直在尝试设置一个简单的promise async结构来返回http请求返回的json对象,但我找不到任何好的例子。我肯定我做错了什么可怕的事,但我不能对此掉以轻心 以下是我正在尝试的: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'
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);
});