Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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 将同步XmlHhtRequest更改为异步承诺会产生不同的结果_Javascript_Promise_Xmlhttprequest - Fatal编程技术网

Javascript 将同步XmlHhtRequest更改为异步承诺会产生不同的结果

Javascript 将同步XmlHhtRequest更改为异步承诺会产生不同的结果,javascript,promise,xmlhttprequest,Javascript,Promise,Xmlhttprequest,我在将同步函数转换为异步函数时遇到问题。 现有代码如下所示 $scope.getTask = function (input, id) { var result = ''; if (condition) { // Get all tasks. var tasks = $scope.getAllTasks(id);

我在将同步函数转换为异步函数时遇到问题。 现有代码如下所示

$scope.getTask = function (input, id) {
                    var result = '';
                    if (condition) {
                        // Get all tasks.
                        var tasks = $scope.getAllTasks(id);
                        if (!angular.isUndefined(tasks)) {
                            var result = 'Failed';
                            for (var i = 0; i < tasks.length; i++) {
                                if (condition) {
                                    result = 'Success';
                                    break;
                                }
                            }
                        }
                    }
                    else if (condition) {
                        result = 'Failed';
                    }
                    else {
                        if (input != null || input != '') {
                            result = input.toLowerCase();
                        }
                    }
                    return result;
                }

                $scope.getAllTasks = function (id) {
                    var xhr = new XMLHttpRequest();
                    var url = "/api/workflow/" + id;
                    xhr.open("GET", url, false);
                    xhr.send();
                    return JSON.parse(xhr.responseText);
                }
$scope.getTask=函数(输入,id){
var结果=“”;
如果(条件){
//获取所有任务。
var tasks=$scope.getAllTasks(id);
如果(!angular.isUndefined(任务)){
var结果='失败';
对于(变量i=0;i
但现在我需要使它异步,所以我尝试使用承诺,但没有帮助。 它没有正确解决。请找到我试过的

$scope.getStatus = function (input, id) {
                        return new Promise((resolve, reject) => {
                        var result = '';
                        if(condition){ 
                            getAllTasks(id).then(function(response){
                                var tasks = response.data;
                                if (!angular.isUndefined(tasks)) {
                                    var status = 'Failed';
                                    for (var i = 0; i < tasks.length; i++) {
                                    if (condition) {
                                        result = 'Success';
                                        break;
                                    }
                                }
                                }
                                resolve(result);
                                return result;
                            });

                            resolve(result);

                        }
                        else if (condition) {
                            result = 'Failed';
                        }
                        else {
                            if (input != null || input != '') {
                               result = input.toLowerCase();
                            }
                        }
                    resolve(result);
                            return result;
                        });
                    }


                    var getAllTasks = function (id) {
                            const url = "/api/workflow/" + id;
                             return $http({method: 'GET', url})
                                .then((response) => {
                                    return resolve(response)
                                });
                    }
$scope.getStatus=函数(输入,id){
返回新承诺((解决、拒绝)=>{
var结果=“”;
如果(条件){
getAllTasks(id)。然后(函数(响应){
var任务=response.data;
如果(!angular.isUndefined(任务)){
变量状态='失败';
对于(变量i=0;i{
返回解析(响应)
});
}
但这总是在回归[目标承诺]。 我需要以字符串形式返回值,如“失败”“成功”。 建议我这里缺少什么。 我知道promise会从文档中返回一个promise对象,但是如何处理呢

$scope.getStatus在指令中用于填充jquesry数据表中的列。 下面是代码片段

 'sTitle': "<strong>" + $translate("list.StatusColumn") + "</strong>",
                                    'mData': function (data, type, val) {
                                        return $scope.getStatus(data.input, data.id);
                                    },
                                    'width': "16%",
                                    'defaultContent': ""
'sTitle':“”+$translate(“list.StatusColumn”)+“”,
“mData”:函数(数据、类型、val){
返回$scope.getStatus(data.input,data.id);
},
“宽度”:“16%”,
“defaultContent”:“
执行以下操作:

首先,如果您在其他承诺中处理http请求,请不要在此处处理该请求:

var getAllTasks = function (id) {
                            const url = "/api/workflow/" + id;
                             return $http({method: 'GET', url});   
                    }
第二:停止从此承诺的回调函数返回任何内容,因为您返回的结果也是在resolve中设置的,您可以在then函数的成功处理程序中获得它,如下所示:

$scope.getStatus = function (input, id) {
                        var result = '';
                        if(condition){ 
                            getAllTasks(id).then(function(response){
                                var tasks = response.data;
                                if (!angular.isUndefined(tasks)) {
                                    result = 'Failed';
                                    for (var i = 0; i < tasks.length; i++) {
                                    if (condition) {
                                        result = 'Success';
                                        break;
                                    }
                                }
                                }

                                return result;
                            });

                            return result;

                        }
                        else if (condition) {
                            result = 'Failed';
                        }
                        else {
                            if (input != null || input != '') {
                               result = input.toLowerCase();
                            }
                        }

                            return result;

                    }

console.log($scope.getStatus());
$scope.getStatus=函数(输入,id){
var结果=“”;
如果(条件){
getAllTasks(id)。然后(函数(响应){
var任务=response.data;
如果(!angular.isUndefined(任务)){
结果='失败';
对于(变量i=0;i
但这总是返回[对象承诺]。
是的,这就是承诺返回的内容。。。一个承诺——然而,既然你在使用它