要将区别先弄清$http服务,它是对原生XMLHttpRequest对象的简单封装,是只能接受一个参数的方法,这个方法会返回一个promise对象,具有sccess和error两个方法。当然,我们也可以在响应返回时用then方法来处理,会得到一个特殊的参数,代表了对象的成功或失败信息,或者可以使用success和error回调代替。
这样就很明晰了,then方法和success方法的主要区别就是,then方法会接受到完整的响应对象,而success则会对响应对象进行析构。
then是源于Promise对象的语法.是异步编程的一种解决方案,比传统的回调函数更合理和更强大切更利于阅读.。
success就是典型的回调嵌套。你现在可以能的一两层回调没什么,想象一下如果嵌套5个以上回调是什么样子,性能方面暂且不说,就连看都看得迷迷糊糊。then就清晰很多 且性能较好
解析then:
then()方法是异步执行
当.then()前的方法执行完后再执行then()内部的程序, 这样就避免了,数据没获取到等的问题
then 方法(承诺)
允许你指定实现承诺时要完成的工作。
语法
参数
promise 必需 Promise 对象
onCompleted 必需 承诺成功完成时要运行的履行处理程序函数。
onRejected 可选 承诺被拒绝时要运行的错误处理程序函数。
备注
承诺必须完成(返回一个值)或者必须被拒绝(返回一个原因)。承诺完成或被拒绝时(无论哪一个先发生),Promise 对象的 then 方法都会运行。
如果承诺成功完成,则将运行 then 方法的履行处理程序函数。如果承诺被拒绝,则将运行 then 方法(或 catch 方法)的错误处理程序函数。
错误处理
由于promises知道处理是否完成,它可以传递错误,不执行任何回调直到遇到错误。
通常,开发者认为一个异步的promise失败等同于抛出一个异常。事实上,如果一个回调抛出一个错误,promise将返回失败信息。把错误传递到下一个可用的错误处理器等同于抛出一次异常直到捕获处理。
参考:
https://segmentfault.com/q/1010000010375405/a-1020000010375670
https://www.jianshu.com/p/523a7330f2f2