Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何处理不总是返回承诺的函数?_Javascript_Angularjs - Fatal编程技术网

Javascript 如何处理不总是返回承诺的函数?

Javascript 如何处理不总是返回承诺的函数?,javascript,angularjs,Javascript,Angularjs,当函数不总是返回承诺时,处理这种情况的最佳方法是什么?我的实际代码太复杂,无法解释,但问题的本质归结为检查一个条件,根据它,我要么返回一个局部变量,要么需要发送一个ajax请求。 大概是这样的: function example(value){ if(!value){ return $http.get('www.example.com'); } else { return "Your value is "+value; } } 是否有方法检查函数

当函数不总是返回承诺时,处理这种情况的最佳方法是什么?我的实际代码太复杂,无法解释,但问题的本质归结为检查一个条件,根据它,我要么返回一个局部变量,要么需要发送一个ajax请求。 大概是这样的:

function example(value){
   if(!value){
      return $http.get('www.example.com'); 
  }
   else {
      return "Your value is "+value; 
  }
}

是否有方法检查函数返回的值是否是承诺,是否需要解决?或者有其他方法来处理这种情况?谢谢你的意见

您可以始终返回承诺:

function example(value){
   if(!value){
      return $http.get('www.example.com'); 
   }
   else {   
      return $q.when("Your value is "+value); 
   }
}

您可以始终返回一个承诺:

function example(value){
   if(!value){
      return $http.get('www.example.com'); 
   }
   else {   
      return $q.when("Your value is "+value); 
   }
}

虽然您可以测试返回类型是否为
Promise
myValue instanceof Promise
,但最好只编写总是返回
Promise
的函数。这使他们保持一致,更容易处理。在您的示例中,您可能需要为异步函数返回
Promise
,或者可能需要返回值,只需使用
Promise.resolve()
和以下值:

function example(value) {
  if(!value) {
    return $http.get('www.example.com');
  } else {
    return Promise.resolve('Your value is ' + value);
  }
}

这样,您就不必担心它会返回什么,并且可以始终以一致的方式处理它。

虽然您可以测试返回类型是否为
承诺
myValue instanceof Promise
,但最好只编写总是返回
承诺的函数。这使他们保持一致,更容易处理。在您的示例中,您可能需要为异步函数返回
Promise
,或者可能需要返回值,只需使用
Promise.resolve()
和以下值:

function example(value) {
  if(!value) {
    return $http.get('www.example.com');
  } else {
    return Promise.resolve('Your value is ' + value);
  }
}

这样,您就不必担心它会给您带来什么,并且可以始终以一致的方式处理它。

从一开始就不要编写这样的函数!只要始终返回一个承诺。否则,
promise.resolve(示例(…)。然后(…)
(或角度等价物)会做得更好,只要始终返回承诺。永远不要首先编写这样的函数!只需始终返回承诺。否则,
promise.resolve(示例(…)。然后(…)
(或角度等效项)会做得更好,只需始终返回承诺。