Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angularjs:尝试在我的应用程序启动时进行asyn调用不会返回承诺_Javascript_Angularjs_Asynchronous - Fatal编程技术网

Javascript Angularjs:尝试在我的应用程序启动时进行asyn调用不会返回承诺

Javascript Angularjs:尝试在我的应用程序启动时进行asyn调用不会返回承诺,javascript,angularjs,asynchronous,Javascript,Angularjs,Asynchronous,在我的应用程序中,我试图在应用程序启动时加载angular JS常量,方法是通过进行异步调用从json文件读取数据,一旦代码命中异步调用,它就会执行其他位,然后返回到.then代码块 在angular JS中是否等待停止执行直到完成异步调用 例如: define(['app'], function (app) { 'use strict'; app.config(function ($provide) { var serviceUrl=null;

在我的应用程序中,我试图在应用程序启动时加载angular JS常量,方法是通过进行异步调用从json文件读取数据,一旦代码命中异步调用,它就会执行其他位,然后返回到.then代码块

在angular JS中是否等待停止执行直到完成异步调用

例如:

define(['app'], function (app) {

    'use strict';


    app.config(function ($provide) {  

        var serviceUrl=null;

        var initInjector = angular.injector(['ng']);

        var $http = initInjector.get('$http');      

         var responsePromise = $http.get('/scripts/config.json');
         responsePromise .then(function (response) {
             serviceUrl = response.data;
             $provide.value('serviceURL', serviceUrl); 
         },function (response) {
            throw new Error('Something went wrong...');
        });

    });

    return app;
});
建议您为此使用app.run方法:

app.run(['$http, $provide', function($http, $provide){
    // your code
}]);
据我所知,您无法使$http方法同步运行。它们都返回一个承诺,该承诺解析为异步。但您可以在代码中等待,直到promise解决如下问题:

var lock=false;

$http.post(...).then(function (results) {
  // your code

  lock=true;
});

while (!lock) {
  // We're just waiting.
}

// code that should be executed after you get something with your request

第二种选择是使用jQuery.ajax{async:false}同步运行请求

我建议您使用RequireJS来实现这一点。虽然这是关于控制器的,但我们已经习惯于加载服务和其他脚本。问题是,在执行$http调用后,应用程序将立即继续执行,这正是OP想要阻止的。您注意到了吗!锁{}块?谢谢,但选项一不适用于我,因为我得到错误未知提供程序:$http,$provideProvider我的代码中没有while块。上面的示例代码位于angularjs requirejs项目应用程序目录中的config.js文件中。此config.js文件在应用程序启动时与routes.js文件一起加载。$provide是您要求angular注入的依赖项。从代码中复制。如果需要,请使用$http.get而不是$http.post。