Axios: рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдореЗрдВ рд╡рд╛рджрд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреИрд╕реЗ рддреЛрдбрд╝реЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рдлрд╝рд░ре░ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: axios/axios

рд╡рд╛рджреЗ рдХреА рдЬрдВрдЬреАрд░ рдХреИрд╕реЗ рддреЛрдбрд╝реЗрдВ?

instance.interceptors.response.use((response) ->
    # my server returns {"status": "success", "data": ...}
    # or {"status": "fail", "data": ...}
    server_response = response.data
    if server_response.status == 'fail'
        alert(server_response.data)  # global alert when status == 'fail'
        # this will throw a "> Uncaught (in promise) ..."
        # how can i do to prevent/stop it enter into the next then()?
        # only when server_response.status == 'success' enter the `then` function
        return Promise.reject(response)

    # only status == 'success' will reach here:
    return response

# in my button actions
instance
    .post('accounts/login', account)
    .then (response) ->
        # if i don't use Promise.reject() in the interceptors,
        # everytime i will use a if:
        if response.data.status == 'success'
            doThings(response)

        # but i want this
        doThings(response)

рдХреЛрдгреАрдп рдореЗрдВ:
http://blog.zeit.io/stop-a-promise-chain-without-using-reject-with-angular-sq/

рдмреНрд▓реВрдмрд░реНрдб рдореЗрдВ:
http://openmymind.net/Cancelling-Long-Promise-Chains/

рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг then() рдореЗрдВ рдЬрдВрдЬреАрд░реЛрдВ рдХреЛ рддреЛрдбрд╝рддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рдЕрдХреНрд╖ рдЗрд╕реЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдореЗрдВ рднреА рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рдкрд╕рдВрдж рд╣реИ:

instance.interceptors.response.use((response) ->
    if someCondition(response)
        return null  # break the chain
    else
        return response

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЕрдВрддрддрдГ рдЗрд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЕрдкрдиреЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдореЗрдВ рдХрднреА рди рд╣рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ:

instance.interceptors.response.use((response) =>┬а{
  if (someCondition(response) {
    return new Promise(() => {});
  }
  return response;
});

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЕрдВрддрддрдГ рдЗрд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЕрдкрдиреЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдореЗрдВ рдХрднреА рди рд╣рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ:

instance.interceptors.response.use((response) =>┬а{
  if (someCondition(response) {
    return new Promise(() => {});
  }
  return response;
});

рдореБрдЭреЗ рдРрд╕реЗ рд╡рд╛рджреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдпрд╛ рдЬреЛ рдХрднреА рд╣рд▓ рдпрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рд░рджреНрджреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛:

axios.interceptors.response.use(null, error => {
    let promise = new Promise(resolve, reject) => {
        setTimeout(() => {
            <code>
            promise.cancel()
        })
    })
    return promise
})

рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рд╡рд╛рджреЗ рдХреЛ рдЦреБрдж рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рд╕реЗ рдПрдХ рдЙрдЪрд┐рдд рд╡рд╛рджрд╛ рдЕрднреА рднреА рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдП рдФрд░ рддрдереНрдп рдХреЗ рдмрд╛рдж .cancel() рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ

@rubennorte рдХрд╛ рдЬрд╡рд╛рдм :

рдореИрдВ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЕрдВрддрддрдГ рдЗрд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЕрдкрдиреЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдореЗрдВ рдХрднреА рди рд╣рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ:

instance.interceptors.response.use((response) => {
  if (someCondition(response) {
    return new Promise(() => {});
  }
  return response;
});

https://stackoverflow.com/a/20068922

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ - рдХрдо рд╕реЗ рдХрдо рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ - рдЖрдкрдХреЛ рдЕрдирд╕реБрд▓рдЭреЗ рд╡рд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрдирдХреЗ рдмрд╛рд╣рд░реА рд╕рдВрджрд░реНрдн рди рд╣реЛрдВ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

airtonix picture airtonix  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

9tor picture 9tor  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

shaosh picture shaosh  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

varmeh picture varmeh  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

achingbrain picture achingbrain  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ