Angularjs 角度承诺延迟未按预期工作
很抱歉,我不能在这里显示完整的代码,我产生了以下代码片段。 我有一个服务和控制器。 在服务中,我向我的组服务添加了2秒超时,以测试微调器加载 但不知怎的,在控制器中,我的代码立即运行,不需要等待2秒钟 我做了3个断点,我期望的执行顺序是:2->1->3 但是,结果是2->3->1 这是我的服务Angularjs 角度承诺延迟未按预期工作,angularjs,promise,angular-promise,Angularjs,Promise,Angular Promise,很抱歉,我不能在这里显示完整的代码,我产生了以下代码片段。 我有一个服务和控制器。 在服务中,我向我的组服务添加了2秒超时,以测试微调器加载 但不知怎的,在控制器中,我的代码立即运行,不需要等待2秒钟 我做了3个断点,我期望的执行顺序是:2->1->3 但是,结果是2->3->1 这是我的服务 groupService.get = function() { var deffered = $q.defer(); deffered.promise = $getMyDataStuffP
groupService.get = function() {
var deffered = $q.defer();
deffered.promise = $getMyDataStuffPromise.then(function (data) {
$timeout(function() {
deffered.resolve(); <- break point 1
}, 2000);
}, function (error) {
deffered.reject();
console.log('group error', error);
});
return deffered.promise; <- break point 2
};
控制器:
$q.all([
PeopleSvc.get(),
GroupSvc.get()
]).then(function(data){
console.log('data returns, stop spinner'); <- break point 3
});
你能告诉我这个代码有什么问题吗?谢谢 reffered.promise=很奇怪,我不知道还能叫它什么
但您甚至不应该尝试实现。已经返回了一个承诺,所以您在这里需要做的就是链接它们:
groupService.get = function() {
return $getMyDataStuffPromise.then(function (data) {
return $timeout(function() {
return undefined; // maybe data?
}, 2000);
});
};
这太奇怪了,我不知道还能叫它什么
但您甚至不应该尝试实现。已经返回了一个承诺,所以您在这里需要做的就是链接它们:
groupService.get = function() {
return $getMyDataStuffPromise.then(function (data) {
return $timeout(function() {
return undefined; // maybe data?
}, 2000);
});
};
这个问题的答案是:你把deferred.promise分配给了错误的东西,所以它不起作用
groupService.get = function() {
var deffered = $q.defer(); // deferred.promise already generated here
/*deffered.promise = */$getMyDataStuffPromise.then(function (data) {
$timeout(function() {
deffered.resolve();
}, 2000);
}, function (error) {
deffered.reject();
console.log('group error', error);
});
return deffered.promise;
};
当您调用$q.defer时,已经生成了一个新的promise对象,您将它重新分配给$getMyDataStuffPromise,当然它会更早解析。只需删除作业即可
当然,如其他帖子所建议的,尽可能远离promise反模式。这个问题的答案是:您将deferred.promise分配给了错误的对象,因此它不起作用
groupService.get = function() {
var deffered = $q.defer(); // deferred.promise already generated here
/*deffered.promise = */$getMyDataStuffPromise.then(function (data) {
$timeout(function() {
deffered.resolve();
}, 2000);
}, function (error) {
deffered.reject();
console.log('group error', error);
});
return deffered.promise;
};
当您调用$q.defer时,已经生成了一个新的promise对象,您将它重新分配给$getMyDataStuffPromise,当然它会更早解析。只需删除作业即可
当然,如其他帖子所建议的,尽可能远离promise反模式。谢谢!。这就是为什么承诺来得太早的原因。谢谢!。这就解释了为什么承诺来得太早。