Ich habe Probleme mit verzögerten Versprechen. Ich habe eine sehr hässliche Zeichenfolge:Verzögerte Versprechen in Funktion verzögert nicht die Ausführung der Funktion
Ich, Firmenname, SSQ ID, das Unternehmen, für das Sie arbeiten (Extraction/XTR/8North) und die Ebene, die Ihrem Unternehmen in Frage Nr. 17 zugeordnet ist.
| Y132 ~
| Y133 ~
| Y134 ~
| Y138 ~
| Y139 ~
| Y140 ~
| Y141 ~
| Y142 ~
| Y143 ~
dass ich jedes Vorkommen eines "| Y000 ~" w ersetzen muss mit einem URL-Link. Dieser Teil des Codes funktioniert ordnungsgemäß. Das Problem ist, dass ich nicht herausfinden kann, wie man ein Versprechen verwendet, um auf die Funktion zu warten (die die Verzögerung mehrerer Versprechen beinhaltet), um zu warten, bis die Funktion beendet ist, bevor ich weitermache.
Ich habe dies in meiner "convertString" -Funktion:
getAllClusterLinks(indices, returnString)
returnString = $scope.returnString;
Hier ist die convetString Funktion:
function convertClusterText(questions, field) {
angular.forEach(questions, function (value, key) {
if (value.vchTextBeforeQuestionCluster != null) {
var str = value.vchTextBeforeQuestionCluster;
var returnString = str.replaceAll('|B', '<b>');
returnString = returnString.replaceAll("|b", "</b>");
returnString = returnString.replaceAll("|+", "<br/>");
returnString = returnString.replaceAll("|L", "<");
returnString = returnString.replaceAll("|R", ">");
returnString = returnString.replaceAll("|T", "<table border='1'>");
returnString = returnString.replaceAll("|/T", "</table>");
returnString = returnString.replaceAll("|S", "<tr>");
returnString = returnString.replaceAll("|/S", "</tr>");
returnString = returnString.replaceAll("|C", "<td>");
returnString = returnString.replaceAll("|/C", "</td>");
returnString = returnString.replaceAll("|A", "'");
returnString = returnString.replaceAll("|Q", "&");
returnString = returnString.replaceAll("|P", ";");
returnString = returnString.replaceAll("|W", """);
returnString = returnString.replaceAll("|H", "<hr style='width: 100%;'>");
returnString = returnString.replaceAll("|U", "<span style='text-decoration:underline'>");
returnString = returnString.replaceAll("|x", "</span>");
returnString = returnString.replaceAll("|N", "<span style='color:black'>");
returnString = returnString.replaceAll("|D", "<span style='color:blue'>");
returnString = returnString.replaceAll("|E", "<span style='color:red'>");
returnString = returnString.replaceAll("|G", "<span style='color:gray'>");
if (returnString.indexOf("|Y") >= 0) {
var indices = [];
var linkCode;
indices = getIndicesOf("|Y", returnString, true);
if (indices.length > 1) {
getAllClusterLinks(indices, returnString)
.then(function() {
returnString = $scope.returnString;
})
value.vchTextBeforeQuestionCluster = returnString;
}
else {
linkCode = getLink(returnString);
contractorService.gethyperlink(linkCode)
.success(function (data) {
var vchUrl = data[0].vchUrl;
var docID = getDocumentID(vchUrl);
var vchLinkName = data[0].vchLinkName;
questions[key].document = docID;
var yay = '<a href="" ng-click="getDocument(cluster)">' + vchLinkName + '</a>';
var yCode = "|Y" + linkCode + "~";
returnString = returnString.replaceAll(yCode, yay);
value.vchTextBeforeQuestionCluster = returnString;
})
}
}
else {
value.vchTextBeforeQuestionCluster = returnString;
}
}
});
};
I "getAllClusterLinks" ausfüllen müssen, bevor die nächste Zeile ausgeführt wird. Hier ist der Code für „getAllClusterLinks“:
function getAllClusterLinks(indices, returnString) {
var promises = [];
var times = 0
var endIndex = 0;
angular.forEach(indices, function (value, key) {
endIndex = getEndIndicesOf("~", returnString, value);
linkCode = getMultiLinks(returnString, value, endIndex)
var promise = getClusterLinks(linkCode, returnString);
promises.push(promise);
})
return $q.all(promises);
}
function getClusterLinks(linkCode, returnString) {
var deferred = $q.defer();
$scope.returnString = returnString;
contractorService.gethyperlink(linkCode)
.success(function (data) {
var vchUrl = data[0].vchUrl;
var end = vchUrl.length;
var docID = vchUrl.substring(vchUrl.indexOf("=") + 1, end);
var vchLinkName = data[0].vchLinkName;
var yay = '<a href="" ng-click="getDocument(' + docID + ')">' + vchLinkName + '</a>';
var yCode = "|Y" + linkCode + "~";
$scope.returnString = $scope.returnString.replaceAll(yCode, yay);
})
return deferred.promise;
}
Der obige Code funktioniert wie erwartet, aber ich muss es zuerst beenden, bevor die Linie returnString = $scope.returnString;
Einstellung.
versucht, dieses aber es funktioniert nicht:
getAllClusterLinks(indices, returnString)
.then(function() {
returnString = $scope.returnString;
})
Jede Hilfe wird sehr geschätzt!
Sie setzen '$ scope.returnString = returnString;' innerhalb der Funktion zu. Erklären Sie ausführlicher, wie dies funktionieren soll.Ich denke, Sie wollen die Zeichenfolge jedes Mal zurückgegeben, aber es ist nicht klar, welches Ziel ist – charlietfl