Ich habe Code wie unten:Wie rekursive Versprechen zu lösen?
function addNumberToFilename(filename) {
var newFilename = "";
var textInsideParentheses = filename.match(/\(([^)]+)\)/);
if (textInsideParentheses !== null && textInsideParentheses[1] !== undefined) {
// have parentheses
var numInParentheses = parseInt(textInsideParentheses[1]);
var nextNumInParentheses = numInParentheses + 1;
newFilename = filename.replace(/\(.*?\)/, String('(' + nextNumInParentheses + ')'))
} else {
// have not parentheses
var reForExtensionExtract = /(?:\.([^.]+))?$/;
var extension = reForExtensionExtract.exec(filename)[1];
var fileNameWithoutExtenstion = filename.replace(/\..+$/, '');
newFilename = fileNameWithoutExtenstion + '(1)' + '.' + extension;
}
checkIfFileExist(newFilename);
}
function checkIfFileExist(filename, path) {
return new Promise(function(resolve, reject) {
var fileWithThatFilenameFound = false;
local.files.listFolder({
"path": "default:\\",
"filter": ["Img"]
}, {
success: function (result) {
result.map(function (elem) {
if (elem.itemName === filename) { // file with that filename exists
// so add parentheses or increase them
fileWithThatFilenameFound = true;
addNumberToFilename(filename);
}
});
if (!fileWithThatFilenameFound) {
// end of the recursion chain! let's resolve finally
resolve(filename);
}
}
});
});
}
...
checkIfFileExist(snapshot.filename + '.jpg').then(function(newFileName) {
local.images.save({
fileName: newFileName
})
});
Aber ich habe Problem.
Wenn es überhaupt keine Rekursion gibt (Dateiname nicht vorhanden, also Auflösung ist Ausführung innerhalb der ersten Versprechung), funktioniert alles. Wenn aber der Dateiname existiert (und die Kette ist checkIfFileExist -> addNumberToFilename -> checkIfFileExist -> resolve()), funktioniert resolve() nicht.
Warum? Wie kann ich rekursive Versprechen lösen?
Ich habe 'checkIfFileExist (newFilename);' geändert, um 'checkIfFileExist (newFilename);' in 'addNumberToFilename' -Funktion zurückzugeben, aber es funktioniert nicht. – bialasikk