2017-09-22 5 views
1

Webサービスから約束したデータを取得し、EJSを使用して表示します。問題は、私が "then"の内部でレンダリングを呼び出すので、意味が成立するまでHTTPページが表示されないことです。NodeJS + EJS + Promise:約束が達成されるまでページが表示されない

webService呼び出しが完了したときに "データ"と "データ"が表示されないHTTPページを表示する方法はありますか?

var webService = new webService(); 
webService.GetData("https://somewebservice.com") 
    .then((result) => 
    { 
     let options: Object = 
     { 
      "data": result 
     }; 

     this.render(req, res, "index", options); 
    }); 

答えて

1

これは、コードを再構成する必要がある可能性があります。しかし、観察可能と呼ばれるものがあります。これは約束ですが、それを購読すると、コールバック関数はコールバック関数が常にそれを監視し、何かが返されるたびに更新されることを意味します。これは再構成が必要ですが、チュートリアルへのリンクがあります。

あなたのコードはおそらく再構成する必要があります。ページをロードして、それを処理したい場合はデータを呼び出す必要があります。

これが役立つかどうか教えてください。

https://medium.com/@benlesh/learning-observable-by-building-observable-d5da57405d87

+0

ページをコールするようにコードを修正しようとしましたが、おそらく私はそれを正しく行う方法がわかりません。 HTTPページでは、実際の結果の代わりに_ [オブジェクトの約束] _を参照してください。ここでは、コードを持っている: '民間レンダリング(REQ:要求、RES:応答、次:NextFunction) { \t LETオプション:オブジェクト= \t { \t \t "promiseCall":this.callPromise、 \tを} ; \t this.render(req、res、 "pages/about"、options); }

Promise call result: <%- promiseCall().then((result) => { console.log("Result from page: " + result); return result; }) %>
約束結果:[オブジェクト約束] –

0

私がなってしまった解決策は以下のとおりです。

  1. ページには、 '$ .getJSON'
  2. JSONを使って自分のサーバー上でJSON APIを呼び出す<body>にonLoadハンドラを持っていますAPIは約束を使用してWebサービスを呼び出し、最後の「then」セットでres.jsonを返します。
  3. API応答時のonLoadハンドラは、テキストを設定してHTTP要素を更新します。

このようにページが読み込まれて表示されると、onLoadハンドラが起動し、Webサービスを処理してページを更新します。

しかし、私はこのすべてが透明であることが好きだったと思いますが、EJSが単純な割り当てによってそのすべてを処理することができれば素晴らしいことでした。

関連する問題