2017-09-22 38 views
1

我從承諾中的Web服務中檢索數據並使用EJS顯示它。問題在於,直到promise完成後才顯示HTTP頁面,這是有道理的,因爲我在「then」中調用render。NodeJS + EJS + Promise:在承諾履行前不會顯示頁面

有沒有辦法讓web頁面調用完成時顯示沒有「數據」和「數據」的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頁面中,我看到_ [object Promise] _而不是實際的結果。在這裏,你有代碼: '私有呈現(REQ:請求,RES:響應,下一個:NextFunction) { \t設選項:對象= \t { \t \t 「promiseCall」:this.callPromise, \t} ; (req,res,「pages/about」,options); }

Promise call result: <%- promiseCall().then((result) => { console.log("Result from page: " + result); return result; }) %>
' Promise call result:[object Promise] –

0

我結束瞭解決的辦法是:

  1. 頁面對<body> onLoad處理函數,使用 '$ .getJSON'
  2. 的JSON我的服務器上調用JSON API API使用promises調用Web服務,在最後的'then'中設置'res.json'
  3. API響應的onLoad處理程序通過設置其文本來更新HTTP元素。

這樣的頁面加載,然後與Web服務並顯示交易的onLoad處理火災和更新頁面。

但是我希望所有這些都是透明的,如果EJS能夠通過一個簡單的任務來處理所有這些事情,那將會很棒。