Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs处理ajax与成功/错误和承诺有什么区别?_Angularjs - Fatal编程技术网

Angularjs处理ajax与成功/错误和承诺有什么区别?

Angularjs处理ajax与成功/错误和承诺有什么区别?,angularjs,Angularjs,我不确定应该在哪里处理ajax请求的响应 有两种口味 通过$http的成功/错误回调处理 通过promise result中的then()方法处理 两人的反应与预期一致。但是,我认为在使用每一个方面都有一个“陷阱”。谷歌没有给我指路。js源代码有点。。。对我来说很神秘 注意:我的示例(1)总是先响应,然后(2)再响应。我认为这只是因为localhost延迟几乎为null,而且它们都是异步方法 $http({ method: 'POST', url: 'ping.php',

我不确定应该在哪里处理ajax请求的响应

有两种口味

  • 通过$http的成功/错误回调处理
  • 通过promise result中的then()方法处理
  • 两人的反应与预期一致。但是,我认为在使用每一个方面都有一个“陷阱”。谷歌没有给我指路。js源代码有点。。。对我来说很神秘

    注意:我的示例(1)总是先响应,然后(2)再响应。我认为这只是因为localhost延迟几乎为null,而且它们都是异步方法

    $http({
        method: 'POST',
        url: 'ping.php',
        headers: {'content-type' : 'application/json'}
    }).
    success(function(data, status, headers, config) {
        console.log("Flavour one success");
    }).
    error(function(data, status, headers, config) {
        console.log("Flavour one error");                       
    }).then(function() { 
        console.log("Flavour two success"); }, 
            function() { console.log("Flavour two error"); 
    

    }))

    根据角度文档

    {HttpPromise}
    –使用标准的
    然后
    方法返回一个promise对象
    还有两种http特定方法:
    success
    error
    then
    方法 接受两个参数:一个
    成功
    和一个
    错误
    回调 使用响应对象调用。
    success
    error
    方法需要 单参数-请求时将调用的函数 分别成功或失败

    要回答您的问题,唯一的区别是
    success
    error
    只接受一个参数,而
    then
    接受两个参数


    第一个总是在第二个之前被调用,这仅仅是因为您按顺序列出了它,这就是承诺的工作方式。如果您列出了另一个
    ,那么它将被第三次调用。

    在基本的成功/错误回调中使用承诺有一些好处。一个好处是,您可以按描述将它们链接起来

    连锁承诺 因为调用承诺的then方法会返回一个新的派生承诺,所以很容易创建承诺链:

    可以创建任意长度的链,并且由于一个承诺可以用另一个承诺解决(这将进一步推迟其解决),因此可以在链中的任何点暂停/推迟承诺的解决。这使得实现像$http的响应拦截器这样的强大API成为可能


    您还可以使用合并多个承诺。这在引导一个依赖于多个资源才能加载的应用程序时非常有用。

    My google和@ClydeByrdIII他没有问回调和承诺之间的区别。他在询问
    成功
    错误
    然后
    函数之间的区别。可能重复“但不要
    成功
    错误
    返回承诺”(查看原始帖子…他就是这么做的。)有点…$http返回承诺”两个$http特定方法:成功和错误“@MariusSoutier您不能链接多个
    success
    error
    调用,但您可以链接
    然后
    来自
    success
    error
    调用的调用。
    promiseB = promiseA.then(function(result) {
      return result + 1;
    });
    
    // promiseB will be resolved immediately after promiseA is resolved and its value
    // will be the result of promiseA incremented by 1`