promise甚至在调用.resolve()之前就得到了解决
promise getting resolved even before .resolve() is called
我在angularjs 中制作了一个LocationService
factory('LocationService', function ($q) {
var deferred = $q.defer();
var curPos = {};
var resolved = false;
return {
getPosition : function (refresh) {
if (!resolved || refresh) {
navigator.geolocation.getCurrentPosition(function (pos) {
curPos.curLat = pos.coords.latitude;
curPos.curLng = pos.coords.longitude;
resolved = true;
console.log("Resolve", curPos);
deferred.resolve(curPos);
}, function (error) {
deferred.reject('Unable to get location: ' + error.message);
}, {
enableHighAccuracy : true
});
} else {
deferred.resolve(curPos);
}
return deferred.promise;
}
}
})
并像这个一样使用它
LocationService.getPosition(refresh).then(function (curPos) {
console.log('then');
var latLng = new google.maps.LatLng(curPos.curLat, curPos.curLng);
$scope.map.setCenter(latLng);
$scope.map.setZoom(15);
});
第一次它运行良好,但当我单击调用getPosition()
的按钮时,它甚至在LocationService
触发deferred.resolve()
之前就解决了。我在回调中得到了错误的结果。但最终在2/3秒后,getCurrentPosition
触发回调,并在curPos
中设置新值。这是我下次得到的。
控制台首先打印then
,在2/3秒后打印Resolve
。
我不明白这里出了什么问题。有人能指导一下吗?
您的递延get被声明为服务构建的一部分。一旦您对getPosition的第一次调用完成,延迟的问题就会得到解决。您需要为每次对getPosition的调用创建并使用一个新的deferred。
相关文章:
- 如何解决这种情况下的非法调用类型错误
- 使用jsonp解决方法进行同步ajax调用
- EmberJS - 使用几个解决方案从外部调用组件方法(呼吁讨论)
- 如何解决从函数内部调用函数的元素
- 如何解决“不能调用方法...未定义“错误
- Rails 基文件具有调用函数 C 的函数 A,但 C 是在两个 JS 文件中定义的.如何按页解决此问题
- 解决节点中非阻塞函数调用中的依赖关系
- 如何在尝试调用JavaScript函数时解决Uncaught引用错误
- 如何解决if-else条件下的ajax调用
- 如何解决ASP.NET中Ajax调用的授权问题
- Chrome:如何解决Math.max.apply(Math,数组)上的“超出最大调用堆栈大小”错误
- 在解决所有承诺之前,调用$.wwhen-done
- 如何解决错误'ext-all.js Uncaught TypeError:无法调用方法'getProxy
- promise甚至在调用.resolve()之前就得到了解决
- 如何解决“无法调用未定义的方法'down'”错误
- 如何解决Uncaught TypeError:非法调用jquery ajax
- 添加另一个jQuery函数到AJAX调用或CSS解决方案
- 如何在Angular Js中调用100多个数据产品——需要一些动态数据驱动的解决方案
- 在方法中的 ajax 调用中使用“this”关键字的解决方案
- 如何在完全信任的解决方案中通过javascript调用Sharepoint 2013 API