簡體   English   中英

AngularJS-腳本停止在工廠函數中運行並返回Promise

[英]AngularJS - Script stops running at factory function with promise return

我一直在學習/從事一個新手項目,該項目基本上是一個簡單的任務管理器(類似於那些待辦事項列表項目)。 我為此項目設計了一個用戶登錄頁面,這是它的工作方式。

因此,我有兩個用於登錄的函數siteLogin() ,在它內部,我想在用戶登錄后使用第二個函數showTasks() ,該函數返回從API獲得的用戶任務( 保證我知道 )。

所以首先我需要從showTasks()函數中的$ http返回值,但最終返回了類似$$state因此我在該網站上搜索並找到了幾種解決方案,到目前為止,我知道$ http並沒有返回價值但返回承諾 因此,在幾次嘗試失敗之后,我的代碼現在可以運行到showTasks()並在那里停止。

所以這是我的代碼。

app.factory('userTaskList', function ($http) {

    return {
        showTasks: function (userName) {
            var tasks = { K_ADI: userName }; //UserName of the per 
            var $promise = $http({
                method: 'POST',
                url: 'http://localhost:5169/api/Isler/' + userName + '/IstenilenKayitCek',
                headers: {
                    'Content-Type': 'application/json'
                },
                data: tasks
            });
            $promise.then(function successCallback(response) {
                var data = response.data;
                console.log("Factory data:", response);
                return success(data);

            }, function errorCallback(response) {     
                error("Error");
            });
        }
    }
});

而我的控制器:

 app.controller('myCtrl', ['$scope', '$http', function ($scope, $http,userTaskList ) {

 $scope.siteLogin = function () {
    var loginMember = {
        K_ADI: $scope.panel.loginUserName,  
        PAROLA: $scope.panel.loginPassword  // HTML input 
    };
    console.log(loginMember);
    $http({
        method: 'POST',
        url: 'http://localhost:5169/api/Kullanicilar/KullaniciDogrula',
        headers: {
            'Content-Type': 'application/json'
        },
        data: loginMember
    }).then(function successCallback(response) {
        console.log("Message sent", response);
        $scope.data = response.data.error.data;
        if ($scope.data === true) {

            console.log("User exists in database");

            //RUNS UNTIL HERE AND STOPS

            userTaskList.showTasks($scope.panel.loginUserName)
                .then(function (res) {
                    $scope.gorev = res;
                    console.log("Fonk ici : ", $scope.gorev);
                    console.log("222222", res);
                }, function (err) {
                    console.log(err);
                });
            console.log("outside func : ", $scope.gorev);     
        } 
    }, function errorCallback(response) {
        console.log("Error: ", response);
    });
}
}]);

這可能看起來像重復的,並且堆棧上有許多類似的問題,但是我嘗試了這些解決方案(我將在以后進行鏈接)仍然無法解決我的問題,而且其中一些還會產生其他類似的問題。 我嘗試使用$q ,嵌套的.then ,最后在工廠定義代碼,然后在模塊中調用其實例,依此類推。 但仍然無法正常工作。

注意:對不起,我英語不好。

showTasks函數中存在幾個錯誤:

app.factory('userTaskList', function ($http) {

    return {
        showTasks: function (userName) {
            var tasks = { K_ADI: userName }; //UserName of the per 
            var $promise = $http({
                method: 'POST',
                url: 'http://localhost:5169/api/Isler/' + userName + '/IstenilenKayitCek',
                headers: {
                    'Content-Type': 'application/json'
                },
                data: tasks
            });
            var derivedPromise = $promise.then(function successCallback(response) {
                var data = response.data;
                console.log("Factory data:", response);
                ̶r̶e̶t̶u̶r̶n̶ ̶s̶u̶c̶c̶e̶s̶s̶(̶d̶a̶t̶a̶)̶;̶
                //IMPORTANT
                return data;

            }, function errorCallback(response) {     
                ̶e̶r̶r̶o̶r̶(̶"̶E̶r̶r̶o̶r̶"̶)̶;̶
                console.log(response.status);
                //IMPORTANT
                throw response;
            });
            //IMPORTANT
            return derivedPromise;
        }
    }
});

所需的數據需要返回到.then方法成功處理程序。

錯誤處理程序中的錯誤需要重新拋出。 否則,被拒絕的承諾將被轉換為值為undefined的成功。

最后,派生的promise必須返回到showTasks函數。


更新

您認為我在$scope.siteLogin內部正確調用了該函數嗎?

依賴項注入是錯誤的:

̶a̶p̶p̶.̶c̶o̶n̶t̶r̶o̶l̶l̶e̶r̶(̶'̶m̶y̶C̶t̶r̶l̶'̶,̶ ̶[̶'̶$̶s̶c̶o̶p̶e̶'̶,̶ ̶'̶$̶h̶t̶t̶p̶'̶,̶ ̶
    function ($scope, $http,userTaskList ) {

應該

app.controller('myCtrl', ['$scope', '$http', 'userTaskList', 
    function ($scope, $http,userTaskList ) {

要么

app.controller('myCtrl', function ($scope, $http,userTaskList ) {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM