在angularjs中组合2个承诺

时间:2016-07-18 17:28:02

标签: javascript angularjs

我结合2个承诺但是没有工作,在服务中我有2个方法,其中方法" UserService.getAuthenticatedUser()"获取当前用户信息,并且有一个" UserService.getAccountTypeData(idUser)",其中获取usertype信息,但要获得第二种方法我需要userID,所以基本上首先我调用& #34; 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:我已经注入了服务......

2 个答案:

答案 0 :(得分:2)

您可以通过返回.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
});

答案 1 :(得分:0)

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

then()