私はangular2サービスを持っていると私はそれが次の操作を行いたい:このAngle2サービスをやや同期させるにはどうすればよいですか?
- のFTPリモートサーバ
- にファイルを探す「結果」JSONオブジェクトを構築し、に戻り、それ
- からいくつかの行を読みます呼び出し元のコンポーネント
実際に私はステップ1/2の作業をしていますが、もちろんそのすべてが非同期です。だから何が起こっていることは、私はthis.ftp
は私のサービスのインスタンスであるサービスには、このコールをやっている私のコンポーネントである:
this.servers = this.ftp.lookForServers();
さて、これは正しく、次のようになり、私のFTPサービスのlookForServersメソッドを呼び出します。
今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;
}
- FTPクライアント、もちろん非同期であるので、この方法は、ほとんどすぐに戻ります - - コールバックが実行し続けながらthis.grabLog(possibles[whereAreWe]+list[p].name);
関数呼び出しがthis.cにさらに通話を発信して終わります。これらのコールバックはファイルをダウンロードし、別のコールバック関数がこのファイルを処理します。これは、1行ずつ、非同期的に保存したいさまざまな詳細を選択します。このチェーンの終わりまでに
- 私は最終的にすべての私の詳細情報を持っている:
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
はい。 Observableを返すため、サブスクリプション(データ)は 'any'です。 –
ObservableとNextObserverはどこからインポートしますか? – RenegadeAndy