在继续之前等待执行功能

时间:2016-05-04 19:58:46

标签: javascript deferred

我是承诺的新手,但我试图在继续之前获得一个函数(返回一个数字)来执行。我已经尝试了以下但没有工作:

var whatNumber = function(){
 var defer = $q.defer();
 myNumber.get().then(defer.resolve);
 return defer.promise;
}

我也尝试过:

var whatNumber = function(){
 var defer = $q.defer();
 defer.resolve( myNumber.get());
 return defer.promise;
}

最后我毫无承诺地尝试了它:

var whatNumber = function(){
 myNumber.get().then(function(result) {
   return result;
 });
}

任何人都有任何想法我做错了什么?

2 个答案:

答案 0 :(得分:3)

你应该阅读deffered antipattern在你的情况下你可以从函数中return myNumber.get();

var whatNumber = function(){
 return myNumber.get();
}

或者,如果您需要从结果中返回特定属性:

var whatNumber = function(){
 return myNumber.get().then(function(result) {
   return result.data;
 });
}

如果你想使用反模式方法(你应该避免),那么你需要解决这个问题并传递参数:

var whatNumber = function(){
 var defer = $q.defer();
 myNumber.get().then(function(result) {
   defer.resolve(result);
 });
 return defer.promise;
}

whatNumber().then(function(result) {
  console.log(result);
});

答案 1 :(得分:2)

你很亲密,你只是从我能看到的不正确的目标。您需要解决您计划使用的值(数据)

var whatNumber = function(){
 var defer = $q.defer();
 myNumber.get().then(function(response){
    defer.resolve(response.data)
 });
 return defer.promise;
}