一段代码:
// 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
。
编写这样的代码是不错的做法?
如何重写上面的代码以避免这种情况?感谢
答案 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是否有例子。