Firebase可引用引用返回处理

时间:2018-08-15 23:27:23

标签: typescript firebase-realtime-database angularfire2

我正在使用angularfire2并进行一次调用以存储对象。如下图所示:

点击处理程序

assignCode(){
    this.ddlSvc.assignCoupon(this.selItem.key, coupon).then(
      (resp) =>  {
                      console.log("user created with:" + resp)
                      const alert = this.core.createAlert('Confirmation', 'Coupon Assgined to customer!')
                      alert.present()

                 }
    )
  }

Angular服务呼叫Firebase

assignCoupon(key:string, coupon:Coupon){
    return this.db.list('/users/' + key + '/coupons').push(coupon)
  }

当主叫客户端用户具有推送到该节点所需的权限时,它可以正常工作。但是,我们正在测试呼叫客户端没有权限的情况。当前,当我们触发这种情况时,我们会以非常难看的方式在UI上获得所有错误,这是一个不错的弹出窗口,因为我们没有处理它。那么,我们如何处理错误部分?因为它是可参考,所以在单击处理程序函数上没有。 “ .catch”来处理。

1 个答案:

答案 0 :(得分:2)

如果转到ThenableReference的定义(在Visual Studio Code中,请按Ctrl-T,然后键入ThenableReference),应该看到类似this的内容:

  interface ThenableReference
    extends firebase.database.Reference,
      PromiseLike<any> {}

我们关心的部分是PromiseLike<any>。如果您跳到定义,您应该会看到this

interface PromiseLike<T> {
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): PromiseLike<TResult1 | TResult2>;
}

请注意,then接受可选的第二个回调,以防发生错误。您应该可以使用它代替catch方法。