Я использую angular1, и у меня есть 4 функции, которые должны выполняться синхронно.Предположим, что эти функции: f1, f2, f3, f4 и должны выполняться в этом порядке.f1, f2, f3, f4 являются функциями, которые используются независимо в других случаях.У меня есть только один вариант использования, где мне нужно выполнить их последовательно.Я знаю, что должен использовать обещание, и я попытался как:
self.selectionPromise = function(){
var deferred = $q.defer();
console.log("Inside promise");
self.f1();
return deferred.promise;
};
А затем использовать его как:
self.updateSelectedFile = function () {
self.selectionPromise()
.then(self.f2() )
.then(self.f3() )
.then(self.f4() )
}
Кажется, не решить мою проблему.Я вижу ошибку: ** TypeError: Невозможно прочитать свойство 'then' из undefined и, кроме того, функции не в порядке **
Могу ли я получить справку о том, как использовать ожидаемую синхронизацию этих 4 функций?
Вот подсказка о структуре кода:
Функция F1:
self.setRecordCount = function ()
{
var deferred = $q.defer();
if (!self.selectedFile)
{
self.recordCount = 0;
return;
}
self.fileInfo = {fileLocation: self.folderPath + self.selectedFile};
FileService.getRecordCount(self.fileInfo)
.then(
function (count)
{
//do something
},
function (errResponse)
{
self.recordCountError = "Error while getting record count for file: " + self.folderPath + self.selectedFile;
}
)
.then(function finishUp(response)
{
console.log("returning from recordCount");
})
;
deferred.resolve("RecordCount");
deferred.promise;
}
функция F2:
self.detectDelimiter = function () {
var deferred = $q.defer();
if (!self.selectedFile) {
return;
}
self.fileInfo = {fileLocation: self.folderPath + self.selectedFile};
FileService.detectFileDelimiter(self.fileInfo)
.then(
function ( fileDelimiter ) {
//do something
},
function( errResponse ) {
self.displayError = "Error attempting to detect file delimiter";
}
)
.then(function finishUp(response){
console.log("returning from detectDelimeter");
})
;
deferred.resolve("Detect Delimeter");
deferred.promise;
}
Теперь я пытаюсь синхронизировать эти 2 функции F1 и F2 и выполнить третий вызов функции:
self.updateSelectedFile = function ()
{
self.setRecordCount()
.then(function(){
console.log("promise done : setRecordCount")
self.detectDelimiter()
.then(function(){
console.log("promise done : detectDelimiter")
self.generateFilePreviewInfo();
})
})
}