在继续之前等待函数执行

Wait for function to execute before continuing

我是 promises 的新手,但我试图让一个函数(returns 一个数字)在继续之前执行。我已经尝试了以下和 none 工作:

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;
 });
}

有人知道我做错了什么吗?

您应该了解 deffered antipattern 在您的情况下,您可以 return myNumber.get(); 来自函数:

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

或者,如果您需要 return 具体 属性 结果:

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);
});

你很接近,只是你的决心在我看来是错误的。您需要解决您计划使用(数据)的价值

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