此示例尝试使同步代码异步。我发现的所有例子都是相反的,除了docs.angularjs.org .. $ q下面的主要第一个例子。
doc列出了我试图使用的$ q构造函数。不幸的是,jsfiddle Angular库1.1.1和1.2.1提供了一个$ q对象(不是函数),如本例所示。相反,我必须提供我的例子,并希望有人能看到这个错误。
https://docs.angularjs.org/api/ng/service/ $ Q
我需要看到“这不会发生!”要执行的行。
f = function(name) {
return $q(function(resolve, reject) {
console.log "this does not happen!"
resolve('great')
});
}
f(name).then(function(result) {
console.log 'result', result
}, function(error) {
console.log 'error', error
});
而不是记录“这不会发生!”接着是“很棒”,我实际上看到函数传递给$ q logged ::
result function(resolve, reject) {
console.log "this does not happen!"
resolve('great')
}
有人能看到我做错了吗?
答案 0 :(得分:5)
有点难以确切地看到您正在尝试的内容,但这里有一些我们使用的可能有用的代码。
f = function(someValue){
var deferred = $q.defer();
doSomethingAsync(someValue, function(result){ return deferred.resolve(result)});
return deferred.promise;
}
f("foo").then(function() {alert("I was called after the async thing happened")})
答案 1 :(得分:5)
你没有做错任何事。我并不认为角度文档显示隐藏在它上面的代码的代码是合适的:
虽然支持构造函数样式的使用,但不是全部 ES6 Harmony承诺的支持方法尚可。
正如你所见,这会造成很多混乱。
使用构造函数方法(如Zipper发布的)
var dfd = $q.defer();
然后您可以执行以下操作:
dfd.reject('some value');
dfd.resolve('some value');