NodeJS + EJS + Promise:在履行承诺之前不会显示页面

时间:2017-09-22 04:47:34

标签: node.js typescript promise ejs

我从承诺中的Web服务检索数据并使用EJS显示它。问题是,在履行承诺之前不会显示HTTP页面,这是有道理的,因为我在“then”中调用了render。

有没有办法在没有“数据”的情况下显示HTTP页面,并在webService调用完成时显示“数据”?

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

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

2 个答案:

答案 0 :(得分:1)

因此,这可能意味着您必须重新构建代码。但有一种叫做可观察的东西。它就像一个承诺,但你订阅了它,这意味着在你进行调用后,回调函数总是监视它并在返回任何内容时进行更新。这需要重组,但这里是教程的链接。

同样值得注意的是,您的代码可能需要重新构建,页面需要加载,然后调用数据,如果这是您想要处理的方式。

如果有帮助,请告诉我。

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

答案 1 :(得分:0)

我最终得到的解决方案是:

  1. 该页面在<body>上有一个onLoad处理程序,使用'$ .getJSON'在我的服务器上调用JSON API
  2. JSON API使用promises调用Web服务,并在最后'then'设置'res.json'
  3. API响应时的onLoad处理程序通过设置文本来更新HTTP元素。
  4. 这样加载并显示页面,然后onLoad处理程序启动并处理Web服务并更新页面。

    然而,我希望所有这些都是透明的,如果EJS可以通过一个简单的任务来处理所有这些事情,那将会很棒。