如何避免使用promise catch来控制程序?

时间:2018-03-07 18:47:06

标签: javascript promise angular-promise

一段代码:

// file defined here.
return getFile.then(function _gotFile(file) { // getFile is a promise, resolved OR rejected
  // A
  // do something on file
  return file;
})
  .catch(function() {
    // B
    // do other things on file, 
    return file;
  })

在上面的代码中,我使用promise catch来控制程序流:如果getFile承诺已解决,请执行A,否则执行B

编写这样的代码是不错的做法?

如何重写上面的代码以避免这种情况?感谢

1 个答案:

答案 0 :(得分:1)

  

如果In [5]: class Data(object): ...: def __init__(self, **kwargs): ...: for k, v in kwargs.items(): ...: setattr(self, k, v) ...: In [6]: my_data = Data(a=1, b=2) In [7]: my_data.a Out[7]: 1 承诺已解决,请执行A,否则执行B.

实际上,没有。当A失败时它也会做B.如果你真的想要"否则",那么你need to use .then(…, …) instead of .then(…).catch(…)。另请参阅Correct Try...Catch Syntax Using Async/Await

  

编写这样的代码是不错的做法?

是的,不。这取决于。

通过例外制定控制流决策是完全正常的。如果出现问题,处理错误绝对是一个好习惯。

另一方面,您可以过度使用例外。有时通过履行案例返回布尔值或结果类型枚举或类似内容,并使用@Override public void onBindViewHolder(ViewHolder holder, int position) { //holder.textView.setText(titles[position]); holder.title.setText(events.getTitle()); holder.time.setText(events.getTime()); holder.places.setText(events.getPlacesLeft()); holder.yourview.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //access from here Toast.makeText(yourActivity.this,holder.yourview.getText().toString(), Toast.LENGTH_SHORT).show(); } }); } / getFile区分它可以更简单。

此外,当您使用例外/拒绝时,您需要提防并正确使用它们。 JS只有if - 全部,没有条件异常,并且手动执行是很麻烦的。尽管如此,通常最好只捕获您实际可以处理的特定类型的错误,并重新抛出其他错误。看看here是否有例子。