一尘不染

如何在Angular.js中链接.then函数和回调成功函数

angularjs

我正在尝试链接嵌套的.then函数并调用成功函数,但是回调是在开始本身中进行的。

    //public method fn
    function fn(callback) {
    //calling the 1st API request
    fn1()
      .then(function(response) {
        //2nd API request function
        call1(response);
      }, function(error) {
        return $q.reject({
        responseStatus: error.status
      });

      })
      // Returning response
      .then(function(response) {
        callback({
        responseStatus: 200
        });
      }, function(error) {
        callback({
          responseStatus: 500
        });
      });
    }

    function call1(response) {
      //2nd API
      fn2()
        .then(function(response) {
         //3rd API request function
            call2(response);
          }, function(error) {
            return $q.reject({
            responseStatus: error.status
          });
        });
    }


    function call2(response) {
      //3rd API request 
      fn3()
        .then(function(response) {
            return lastfunction();
          //here i need to callback the success  response status
          }, function(error) {
            return $q.reject({
            responseStatus: error.status
          });
        });
    }


    function fn1(){
     //some code 
     }
    function fn2(){
    //some code 
    }
    function fn3(){
    //some code 
    }

    //Controller

    //i will show response status callback here

    if(response.status ==200){
      show output;
     }
     else{
      //response 500
      show errors;
      }

基本上,我需要在所有服务调用成功时向其他控制器回调“200”响应状态,即使一个请求失败,我也需要发送“500”。我的代码“响应状态为200”正在使用第一个.then函数本身进行调用。我想将此服务电话称为que

任何帮助,将不胜感激。


阅读 253

收藏
2020-07-04

共1个答案

一尘不染

您的{ responseStatus: x }对象仅出于流控制的目的而存在,可以自然地由; 返回的promise 的 成功路径 和 _错误路径_提供fn()

同样,有了promise,就没有必要将回调传递给fn()它了-实际上,这样做是一种不好的做法。

所以首先

  • 清除callback全部通过
  • 从每个底层函数返回一个承诺
  • 简化成功链接
  • 清除不必要的错误处理程序
    function fn() {
        return fn1().then(call1);
    }
    function call1() {
        return fn2().then(call2);
    }
    function call2() {
        return fn3().then(lastfunction);
    }
    function fn1() {
        //some code that returns a promise
    }
    function fn2() {
        //some code that returns a promise
    }
    function fn3() {
        //some code that returns a promise
    }

然后,调用如下:

    fn().then(function(response) {
        // success callback (your "200" condition)
        // show output;
    }).catch(function(error) {
        // error callback (your "500" condition)
        // show error;
    });

response变种会被任何lastfunction()交付。如果你想你的问题response是什么是带来了一些聚集fn1()fn2()fn3()不是由已经交付lastfunction()。这个问题在这里得到了全面解决。

errorVAR将是第一个Error在执行的过程中发生fn(),没有信息丢失;
error.messageerror.status(如果存在)可以读取/显示。

2020-07-04