在javascript中调用Parse方法后代码没有按顺序运行

时间:2015-05-21 23:07:23

标签: javascript parse-platform

我在我的项目中使用Parse.com,我注意到一些非常奇怪的东西阻止我实现我想要的东西。 这段代码:

(function() {
    console.log('A');
    Parse.Cloud.run('getCarMakes', {}, {
        success: function(results) {
            console.log('B');
            for (var i = 0; i < results.length; i++) {
                $scope.makes.push(results[i]);
            }
        },
        error: function() {
            console.log('C');
        }
    });
    console.log('D');
    for (var i = 0; i < $scope.makes.length; i++) {
        console.log($scope.makes).get('Make');
    }
})();

控制台输出是: 一个 乙 d ç

D怎么来C? 我该怎么办?

3 个答案:

答案 0 :(得分:2)

Matansab,你需要开始思考&#34;异步&#34;。

简短的回答是:把&#34; D&#34;在&#34;成功&#34;回调。

(function () {
console.log('A');
Parse.Cloud.run('getCarMakes', {}, {
    success: function (results) {
        console.log('B');
        for (var i=0;i<results.length;i++){
            $scope.makes.push(results[i]);
        }

        console.log('D');
        for (var i=0;i<$scope.makes.length;i++){
           console.log($scope.makes).get('Make');
        }
    },
    error: function () {
        console.log('C');
    }
});
    console.log("This will always run right after A");
})();

&#34;成功&#34;功能是一个&#34;回调&#34;。回调是Javascript中的常见模式。他们被称为#34;在异步函数返回后。异步函数是对网络或磁盘等事物的请求,需要很长时间Javascript不应该等待。一旦异步功能准备就绪,它就会调用&#34;回调&#34;。

您可以通过Google搜索了解有关javascript回调的更多信息,或者只是尝试here

答案 1 :(得分:2)

迈克尔科尔是对的。同样取决于你的实现,因为C在错误块中运行,你也可以在那里运行D,它将在C之前运行。

   (function () {
    console.log('A');
    Parse.Cloud.run('getCarMakes', {}, {
        success: function (results) {
            console.log('B');
            for (var i=0;i<results.length;i++){
                $scope.makes.push(results[i]);
            }
        },
        error: function () {

        console.log('D');
        for (var i=0;i<$scope.makes.length;i++){
            console.log($scope.makes).get('Make');
        }

        console.log('C');
        }
    });

})();

答案 2 :(得分:0)

它没有按顺序运行,因为您的成功和错误函数是回调。在Parse.com库实际调用它们之前,它们不会被执行。