如何在 AngularJs 中处理回调函数

How to Handle CallBack Functions in AngularJs?

本文关键字:处理 回调 函数 AngularJs      更新时间:2023-09-26

在控制器中,我从工厂返回对象。该方法为回调类型。

但问题是对象没有重新出现。

我的实现是:

.factory('fileReadFactory', ['$http',
    function ($http) {
        var objRead = {
            setReadObject: '',
            setPath: 'comMyTaxi',
            setFileName: '',
            status: false,
            errorCode: ''
        };
        var factory = {};
        factory.fileRead = function RequestFileSystem(fileName) {
            alert('factory start');
            objRead.setFileName = fileName;

            try {
                window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, createDirectory, fail);
                objRead.status = true;
                return objRead;
            } catch (e) {
                return objRead;
            }
        }
        ///write steps starts
        function createDirectory(fs) {
            fs.root.getDirectory(objRead.setPath, {create: true, exclusive: false}, onSuccessCreateFile, fail);
        }
        function onSuccessCreateFile(dirEntry) {
            dirEntry.getFile(objRead.setFileName + '.txt.gz', null, gotFileEntryRead, fail);
        }
        function gotFileEntryRead(fileEntry) {
            //  alert('in 2 type step2');
            fileEntry.file(gotFileReading, fail);
        }
        function gotFileReading(file) {
            //  alert('in 2 type step3');
            readFile(file);
        }
        function readFile(file) {
            // alert('in 2 type step4');
            var reader = new FileReader();
            reader.onloadend = function (e) {
                //   alert("Text is: "+this.result);
                objRead.setReadObject = this.result;
            }
            reader.readAsText(file);
            //  alert('reading Ends');
        }
        //write file ends
        function fail(err) {
            alert('error ' + err.code);
            objRead.errorCode = err.code;
            throw e;
        }
        return factory;
    }]);

我在控制器内的调用就像

var objReturn = fileReadFactory.fileRead('myProfile');
    alert(objReturn.status);
    alert(JSON.parse(objReturn.setReadObject));
    if(objReturn.status){
        var obj=  JSON.parse(objReturn.setReadObject);
       // alert(obj);
      //  alert('Inside Object World');
        $scope.myprofile = obj;
    }

我没有得到 if 块。那么我该如何管理回电呢?

尝试调用您的服务并在 then() 函数中执行警报。您还应该阅读有关承诺的信息:http://andyshora.com/promises-angularjs-explained-as-cartoon.html

var objReturn = fileReadFactory.fileRead('myProfile').then(function(){
    alert(objReturn.status);
    alert(JSON.parse(objReturn.setReadObject));
    if(objReturn.status){
        var obj=  JSON.parse(objReturn.setReadObject);
       // alert(obj);
      //  alert('Inside Object World');
        $scope.myprofile = obj;
    }
});