Node.js 用res.send()承诺;

Node.js 用res.send()承诺;,node.js,express,promise,Node.js,Express,Promise,我使用phantomjs和短语为单页应用程序正确共享页面。 下面是一些代码示例: if (isbot(req.headers['user-agent'])){ var url= req.protocol+'://'+req.get('host')+ req.originalUrl phridge.spawn() .then(function (phantom) { var page = phantom.createPage();

我使用phantomjs和短语为单页应用程序正确共享页面。 下面是一些代码示例:

if (isbot(req.headers['user-agent'])){
    var url= req.protocol+'://'+req.get('host')+ req.originalUrl
    phridge.spawn()
      .then(function (phantom) {
         var page = phantom.createPage();
            return page.run(url, function (url, resolve, reject) {
                var page = this;
                page.open(url, function (status) { 
                    // handle page after load
                });
            })
            .then(function (contnt) {
                res.send(contnt);
            })
            .then(phridge.disposeAll());
            .catch(function (err) {
                console.error(err.stack);
            })

        }
else {
    next();
}

问题是-机械师
res.send()
如何与promise一起工作?将执行
phridge.disposeAll()

您犯了许多错误。在编写这些代码之前,您应该确保熟悉
Promise
风格的编程。见最后一节


在这种情况下,没有,因为

        .then(function (contnt) {
            res.send(contnt);
        })
零件未返回
承诺

在本部分中,如果您确信
res.send
不会引发任何异常,您可以编写:

        .then(function (contnt) {
            res.send(contnt);
            return new Promise()
        })
那么后面呢,

        .then(phridge.disposeAll())
也是有问题的,您应该将其修改为

        .then(() => phridge.disposeAll())
即使它是链的末端,并且没有创建新的
承诺的用处,您也应该这样写,因为
then()
函数的参数是函数,而不是结果

您需要确保每个
。然后()
分支在链接它们时返回一个
Promise
类对象。(我没有检查其他人,因为我不知道他们返回了什么。)


好的,还有更多的错误,我看到了冗余的
之后,然后()
分支。我不确定是否还有更多的问题


我认为问题更严重:您不理解
Promise
风格的编程。您应该首先仔细阅读ES6 Promise或Promise库(例如,取决于您的库所依赖的库)文档。

我将结合
res.send
disposeAll()
。不需要使代码过于复杂。
res.send
是同步的,返回布尔值

phridge.spawn()
  .then(function (phantom) {
     var page = phantom.createPage();
        return page.run(url, function (url, resolve, reject) {
            var page = this;
            page.open(url, function (status) { 
                // handle page after load
            });
        })
        .then(function (contnt) {
            res.send(contnt);
            phridge.disposeAll()
        })
        .catch(function (err) {
            console.error(err.stack);
        })

这一行看起来是错误的-
。然后(phridge.disposeAll())
phridge.disposeAll()是否返回函数?因为
的参数,因此
应该是函数。。。也许你想做
,然后(phridge.dispeall)
将执行phridge.disposeAll()
res.send()
的工作原理与同步功能完全相同。首先阅读docs@ponury kostek是的,我意识到问题的作者可能不熟悉这个主题,谢谢。