Оценивайте ценность на каждом этапе связанного обещания и выходите из него - PullRequest
1 голос
/ 03 августа 2020

У меня есть следующее обещание в цепочке. На каждом этапе мне нужно оценивать, не является ли возвращаемое значение нулевым. Я могу добавить условие if else на каждом этапе, но мне было интересно, есть ли более сжатый способ сделать это. Кроме того, как я могу выйти из цепочки, если значение равно нулю на любом этапе?

       axios.post('/api/login', accounts)
        .then((response) => {
          this.nonce = response.data
          return this.nonce
        }).then((nonce) => {
          let signature = this.signing(nonce)
          return signature
        }).then((signature) => {
          this.verif(signature)
        })
        .catch((errors) => {
          ...
        })

Спасибо. Дж.

Ответы [ 3 ]

3 голосов
/ 03 августа 2020

Вы прерываете цепочку обещаний, выдавая ошибку:

       axios.post('/api/login', accounts)
        .then((response) => {
          this.nonce = response.data
          return this.nonce
        }).then((nonce) => {
          if (!nonce) throw ("no nonce")
          let signature = this.signing(nonce)
          return signature
        }).then((signature) => {
          if (!signature) throw ("no signature")
          this.verif(signature)
        })
        .catch((errors) => {
          ...
        })
2 голосов
/ 03 августа 2020

Вложенные обещания не нужны. Попробуйте это

axios.post('/api/login', accounts)
        .then(async (response) => {
          this.nonce = response.data
          let signature = await this.signing(this.nonce);
          if(!signature){
            throw "invalid"
          }
          this.verif(signature);
        .catch((errors) => {
          ...
        })
1 голос
/ 03 августа 2020

краткость, скорее всего, это может быть единица .then(), что касается выхода проверки из-за выброса любого нулевого значения.

axios.post('/api/login', accounts)
        .then(async (response) => {
          if(!response.data) throw "Response Error"
          this.nonce = response.data

          const signature = await this.signing(this.nonce);
          if(!signature) throw "invalid"
          
          this.verif(signature)
         })
        .catch((errors) => {
          ...
        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...