承诺不会返回正确的对象

时间:2016-09-21 10:40:40

标签: javascript angularjs parse-platform promise

我对以下承诺链有疑问:

Parse.Cloud.run('cloudlogin', {
        fb_accessToken: $localStorage.accessTokenFacebook
        , facebookID: FACEBOOKID
    }, {
        success: function (userdata) {
            alert(JSON.stringify(userdata))
            $localStorage.username = userdata.username;
            $localStorage.password = userdata.password;
            $localStorage.fb_access_token = userdata.fb_accessToken;
            var bool = userdata.isnewuser
            alert('bool' + bool)
            return bool
        }
        , error: function (error) {
            alert(error)
            $state.go("login")
                .then(function () {
                    $ionicLoading.hide()
                })
        }
    })
    .then(function (isnewuser) {
        $localStorage.organizerAccess = true;
        alert('fbdata' + JSON.stringify(isnewuser))
    })

我想做出第一个承诺,将布尔值'isnewuser'返回到第二个promise,而是返回整个'userdata'对象。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

正如文档所说 - then(successCallback, [errorCallback], [notifyCallback]) - 无论何时或将要解决或拒绝承诺,只要结果可用,就会异步调用其中一个成功或错误回调。使用单个参数调用回调:结果或拒绝原因。此外,在解决或拒绝承诺之前,可以将通知回调调用零次或多次以提供进度指示。

所以,而不是获取返回值then获取返回的对象,该对象导致success: function (userdata) userdata

答案 1 :(得分:0)

成功是一个回调函数,它的返回值不会传递给下一个。如果你想将bool值传递给下一个,需要重写下面的代码。

Parse.Cloud.run('cloudlogin', {
        fb_accessToken: $localStorage.accessTokenFacebook
        , facebookID: FACEBOOKID
     }, {
         error: function (error) {
            alert(error)
            $state.go("login")
                .then(function () {
                    $ionicLoading.hide()
                })
        }
    }).then(function (userdata) {
            alert(JSON.stringify(userdata))
            $localStorage.username = userdata.username;
            $localStorage.password = userdata.password;
            $localStorage.fb_access_token = userdata.fb_accessToken;
            var bool = userdata.isnewuser
            alert('bool' + bool)
            return bool
        })
    .then(function (isnewuser) {
        $localStorage.organizerAccess = true;
        alert('fbdata' + JSON.stringify(isnewuser))
    })

答案 2 :(得分:0)

login: function () {

    var deferred = $q.defer();

    Parse.Cloud.run('cloudlogin', {
        fb_accessToken: $localStorage.accessTokenFacebook,
        facebookID: FACEBOOKID
    }).error(function (error) {
        alert(error)
        $state.go("login")
        .then(function () {
            $ionicLoading.hide()
        })
    })
    .then(function (userdata) {
        alert(JSON.stringify(userdata))
        $localStorage.username = userdata.username;
        $localStorage.password = userdata.password;
        $localStorage.fb_access_token = userdata.fb_accessToken;
        deferred.resolve(userdata.isnewuser);
    });

    return deferred.promise;
}

在服务类中编写此函数并从控制器

调用它