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
但这总是返回[对象承诺]。
是的,这就是承诺返回的内容。。。一个承诺——然而,既然你在使用它