如果出现错误,是否有办法忽略完成表?
例如,我不想删除$check_user_details = mysql_query("select * from `employee` where `username` = '".mysql_real_escape_string($_SESSION["VALID_USER_ID"])."'");
//Validate created session
if(mysql_num_rows($check_user_details) < 1)
{
session_unset();
session_destroy();
header("location: login.php");
exit;
}
//Get all the logged in user information from the database users table
$get_user_details = mysql_fetch_array($check_user_details);
if(isset($_POST['accept']))
{
$msg = "Approved";
//$assignee=$_POST['accept'];
$assignee = $get_user_details['fullname'];
}
中的值,并在第一个完成时完成时将图片删除到Firebase Realtime Database
:
Firebase Storage
存储上可能不存在图片,因此// MARK: DELETE - FUNCTION
public func delete(id: String) -> Completable {
return databaseRef.child("objects").child(id).rx.removeValueAsCompletable()
.andThen(storageRef.child("objects").child(id).rx.delete())
}
函数如果子元素不存在则返回错误,并且delete
函数的Completable也返回错误。如果它返回错误我不想忽略第二个函数,是否可能? RxSwift中是否存在名为delete(id: String)
的函数,或类似的东西?
感谢您的帮助!
答案 0 :(得分:0)
没有ignoreError()
,但您可以尝试使用选项来解决这个问题。 Completable.catchError
可以有效,但要求您返回另一个有效的Completable
。它更像是“错误地图”。
如果您只是在错误时完成,那么您将全部设置为catchError
。
如果您在错误时需要不完成,我建议您将此映射到Observable<Void>
.next
时.completed
和Completable
.next
1}}源序列完成。借助Observable<Void>
的强大功能,您可以将错误映射到值而不是完成。
我们假设您的Completable
基于.map(Optional.init)
:
nil
.catchErrorJustReturn(nil)
:.filter { $0 != nil }.map { $0! }
Completable
或类似。如果你最后需要一个Observable<Void>
但现在有一个.concat(.never()).asCompletable()
,请尝试再将其转换回来:b.py
毕竟,你知道到目前为止只生成一个过程元素,错误或完成事件。
答案 1 :(得分:0)
您可以使用 .catchError { _ in .empty() }
:
public func delete(id: String) -> Completable {
databaseRef.child("objects").child(id).rx.removeValueAsCompletable()
.andThen(storageRef.child("objects").child(id).rx.delete())
.catchError { _ in .empty() }
}
它将错误转换为空的 Completable。