Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.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
Javascript 在angularjs中组合2个承诺_Javascript_Angularjs - Fatal编程技术网

Javascript 在angularjs中组合2个承诺

Javascript 在angularjs中组合2个承诺,javascript,angularjs,Javascript,Angularjs,我结合了2个承诺,但不起作用,在一个服务中,我有2个方法,其中方法“UserService.getAuthenticatedUser()”获取当前用户信息,而“UserService.getAccountTypeData(idUser)”获取用户类型信息,但要获取第二个方法,我需要用户ID,所以基本上首先调用“UserService.getAuthenticatedUser()”,获取id,然后调用“UserService.getAccountTypeData(idUser)”,但不起作用 f

我结合了2个承诺,但不起作用,在一个服务中,我有2个方法,其中方法“UserService.getAuthenticatedUser()”获取当前用户信息,而“UserService.getAccountTypeData(idUser)”获取用户类型信息,但要获取第二个方法,我需要用户ID,所以基本上首先调用“UserService.getAuthenticatedUser()”,获取id,然后调用“UserService.getAccountTypeData(idUser)”,但不起作用

 function isAccount(accountName) {
             UserService.getAuthenticatedUser()
                .then(function (response) {
                    var userDetails = response.data;

                });


            UserService.getAccountTypeData(idUser)
                .then(function (response) {
                    var userDetails = response.data;
                    return  userDetails;
                });

}

PS:我已经注入了服务…

您可以通过从
函数返回值来链接您的承诺

function isAccount(accountName) {
    return UserService.getAuthenticatedUser(accountName) // pass in accountName argument?
        .then(function(response) {
            var userDetails = response.data;
            return userDetails.Id; // user id value
        })
        .then(UserService.getAccountTypeData) // userDetails.Id gets passed to getAccounttypeData method
        .then(function(response) {
            var userDetails = response.data;
            return userDetails;
        });

}

// usage
isAccount('AccountA').then(function(userDetails) {
    // do something with userDetails
});

您可以通过从
.then()
函数返回值来链接承诺

function isAccount(accountName) {
    return UserService.getAuthenticatedUser(accountName) // pass in accountName argument?
        .then(function(response) {
            var userDetails = response.data;
            return userDetails.Id; // user id value
        })
        .then(UserService.getAccountTypeData) // userDetails.Id gets passed to getAccounttypeData method
        .then(function(response) {
            var userDetails = response.data;
            return userDetails;
        });

}

// usage
isAccount('AccountA').then(function(userDetails) {
    // do something with userDetails
});

您处理的是异步调用,因此当您调用
.then()
方法时,它将执行函数并将回调连接到作为参数传递给
then()
的匿名函数。如果第二个函数依赖于第一个函数,您可以像这样嵌套它们

function isAccount(accountName) {
      UserService.getAuthenticatedUser()
         .then(function (response) {
             var userDetails = response.data;
             UserService.getAccountTypeData(idUser)
                .then(function (response) {
                    var userDetails = response.data;
                    return  userDetails;
                });
         });
}

您处理的是异步调用,因此当您调用
.then()
方法时,它将执行函数并将回调连接到作为参数传递给
then()
的匿名函数。如果第二个函数依赖于第一个函数,您可以像这样嵌套它们

function isAccount(accountName) {
      UserService.getAuthenticatedUser()
         .then(function (response) {
             var userDetails = response.data;
             UserService.getAccountTypeData(idUser)
                .then(function (response) {
                    var userDetails = response.data;
                    return  userDetails;
                });
         });
}

谢谢Steam,只有一个问题,这样的嵌套正确吗?
code
UserService.getAuthenticatedUser().then(函数(响应){var userDetails=response.data;UserService.getAccountTypeData(idUser)。then(函数(响应){var userDetails=response.data;return userDetails;});})
code
@MarcoPereira嵌套也可以,只要确保您引用的是已定义的变量。在您的注释示例中,
idUser
不存在。我假设它来自您的第一个
userDetails
实例。@MarcoPereira您没有定义
idUser
,否则基本上就是sameThanks Steam,只有一个问题,这样的嵌套是否正确?
code
UserService.getAuthenticatedUser().then(函数(响应){var userDetails=response.data;UserService.getAccountTypeData(idUser)。then(函数(响应){var userDetails=response.data;return userDetails;});})
code
@MarcoPereira嵌套也可以,只需确保您引用的是定义的变量。在您的注释示例中,
idUser
不存在。我假设这将来自您的第一个
userDetails
实例。@MarcoPereira您没有定义
idUser
,但其他情况基本相同首先在
then()
中缺少一个返回,你知道……我在考虑返回,由于这些调用是异步执行的,我认为他不能以他在这里尝试的方式返回它。我认为返回是无用的。当然可以,你需要返回
UserService.getAccountTypeData()
promise,您还需要返回到
isAccount()
与在其他应答中的方式相同,但一旦
UserService.getAuthenticatedUser()。然后(…)
调用,它就已经退出
isAccount(…)
,对吗?。当服务调用完成时,它将执行anon函数,但这是它自己的闭包。不……您正在创建一个承诺链。因此,
isAccount()
将被称为
isAccount()。然后(…
但您需要将承诺返回到下一个
然后()
在第一个
然后()中缺少返回
你知道……我在考虑返回,由于这些调用是异步执行的,我认为他不能按他在这里尝试的方式返回。我认为返回是无用的。当然可以,你需要返回
UserService.getAccountTypeData()
promise,你还需要返回到
isAccount()
与在其他应答中的方式相同,但一旦
UserService.getAuthenticatedUser()。然后(…)
调用,它就已经退出
isAccount(…)
,对吗?。当服务调用完成时,它将执行anon函数,但这是在它自己的闭包中。不……您正在创建承诺链。因此
isAccount()
将被称为
isAccount()。然后(…
但您需要将promise返回到下一个
then()