У меня есть служба angular2, и я хочу, чтобы это сделать следующее:Как сделать эту функцию углового2 несколько синхронной?
- Ftp на удаленный сервер
- Найдите файл прочитать несколько строк из него
- Построить объект JSon «Результаты» и вернуться к вызывающий компонент
Так что, на самом деле у меня есть шаги 1/2, но, конечно же, все его «асинхронные». Так что же происходит в моем компоненте я делаю этот призыв к службе, где this.ftp
является экземпляром моей службы:
this.servers = this.ftp.lookForServers();
Теперь это правильно вызывает метод lookForServers моего FTP сервиса, который выглядит следующим образом:
lookForServers(){
var servers = [];
var whereAreWe = 0;
var possibles = ["/path/to/servers/"];
for(var i=0;i<possibles.length;i++){
whereAreWe = i;
this.c.list(possibles[i],false,(err,list)=>{
for(var p=0;p<list.length;p++){
console.log(list[p]);
var server_version = this.grabLog(possibles[whereAreWe]+list[p].name);
servers.push({
name: list[p].name,
path: possibles[whereAreWe]+list[p].name,
version: server_version
});
}
});
}
return servers;
}
Теперь - вызов this.grabLog(possibles[whereAreWe]+list[p].name);
функция заканчивает делать дополнительные звонки в this.c - клиент FTP, который, конечно, является асинхронной, поэтому этот метод возвращает почти сразу - в то время как обратные вызовы продолжают работать. Эти обратные вызовы загружают файл, а затем другая функция обратного вызова обрабатывает этот файл - снова по очереди, асинхронно выбирая различные детали, которые я хочу сохранить.
К концу этой цепи - У меня есть все мои данные в финале:
lineReader.on('close',() => { function - but of course my `this.ftp.lookForServers();` function call has long gone....and the component is none the wiser.
Так как я могу позволить эту работу асинхронно, и по-прежнему передавать обратно к компоненту моих результатов объект JSON, как только работа завершена? Вероятно, это довольно простой вопрос о том, как сделать вызов службы обратным вызовом компонента ...?
Хорошо, когда всякий раз, когда вы подписываетесь, все, что вы возвращаете из другого обратного вызова, возвращается обратно в подписанный обратный вызов? – RenegadeAndy
Да. Когда вы делаете .subscribe ((данные), «данные» являются «any []», потому что функция возвращает Observable. –
где я импортирую Observable и NextObserver из? – RenegadeAndy