我正在尝试链接嵌套的.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
任何帮助,将不胜感激。
您的{ responseStatus: x }对象仅出于流控制的目的而存在,可以自然地由; 返回的promise 的 成功路径 和 _错误路径_提供fn()。
{ responseStatus: x }
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()。这个问题在这里得到了全面解决。
response
lastfunction()
fn1()
fn2()
fn3()
该errorVAR将是第一个Error在执行的过程中发生fn(),没有信息丢失; error.message和error.status(如果存在)可以读取/显示。
error
Error
error.message
error.status