如何在不发起http呼叫的情况下返回承诺? ATM我有一些模拟JSON将被API调用所取代。
0
A
回答
2
下面是一个完整的例子。注意我们使用$ q来获得延期,做一些有趣的事情,然后用“决心”发送决赛。我像使用$ http一样使用JSON,并使用JSON过滤器来显示它。
代码:
var app = angular.module("myApp", []);
app.service("myService", function($q, $timeout) {
return {
getData: function() {
var deferral = $q.defer();
$timeout(function() {
deferral.resolve({
id: 1,
status: "Returned from service.",
promiseComplete: true });
}, 2000);
return deferral.promise;
}
};
});
app.controller("myController", function($scope, myService) {
var result = { status: "Initialized." };
$scope.result = result;
myService.getData().then(function(data) { $scope.result = data; });
});
工作小提琴:http://jsfiddle.net/jeremylikness/HL7h2/
当你运行它,你会看到一个JSON项目输出,然后在约2秒后,将更新到服务的结果呼叫。
+0
真棒的东西谢谢! – FutuToad
0
0
这应该可能是一个评论,但我经常看到这一点,认为这是不好的做法,尤其是关于像DRY和KISS原则。
$timeout()
会返回一个承诺。你不需要自己制作一个。这意味着嘲讽一个$http
要求,您可以简单地写类似:
var promise = $timeout(function() {
return {
data: // some data
}
});
promise.then(function (response) {
// do whatever you like
});
这里是一个修改小提琴:http://jsfiddle.net/1vgs7nbj/1/(我偷了大部分来自杰里米Likness的回答以上)。
恕我直言,这是最好的方式来做到这一点,因为它是干净的,可能是最短的办法。 (json);
相关问题
- 1. 呼叫同样的承诺第二次返回两个响应(第一呼叫和第二呼叫响应)
- 2. 承诺呼叫与承诺分辨
- 3. 多次呼叫承诺
- 4. angularjs:链承诺返回一个承诺,而不是一个对象
- 5. 以角度呼叫另一个http呼叫中的http呼叫
- 6. Angular2承诺 - 返回已返回一个承诺
- 7. 为什么然后返回一个新的承诺,而不是返回承诺返回的onFulfilled
- 8. 返回一个承诺,而不是有角的$ q.then()
- 9. cursor.toArray()返回承诺而不是数组
- 10. 返回承诺的输出
- 11. http呼叫中的角度http呼叫
- 12. Http Api呼叫承诺的响应是未定义的 - Angular 2
- 13. 承诺中的退化呼叫
- 14. AngularJS多次处理呼叫承诺
- 15. 返回一个AngularJS $ q承诺与TypeScript
- 16. Angularjs $ q未返回承诺
- 17. Ionic1 Factory $ http请求返回承诺
- 18. 解开承诺从HTTP服务返回
- 19. 告诉呼叫者一个函数'很好',一个承诺不能满足
- 20. 呼叫控制器功能从一个承诺在外部JS
- 21. click()不返回承诺
- 22. 返回承诺与每个
- 23. 返回一个依赖的承诺
- 24. Winjs承诺返回一个值
- 25. 从承诺中返回一个值
- 26. 从循环中返回一个承诺
- 27. 承诺正在返回[对象承诺]
- 28. 返回空承诺
- 29. Redux返回承诺
- 30. 返回承诺值
return $ q.when(json); – Stewie
@Stewie感谢,但就是这个不错的方法我真正的上游来电将被期待同样的JSON结果为$ http.get( – FutuToad
$ HTTP服务返回的响应对象,以'data'持有物业的实际JSON,所以你只需要把你的json换成简单的对象:'$ q.when({data:})'; –
Stewie