最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

等待继续使用快递之前的木偶模块的异步回

运维笔记admin9浏览0评论

等待继续使用快递之前的木偶模块的异步回

等待继续使用快递之前的木偶模块的异步回

我有一个expressjs服务器架设与后台脚本运行的木偶。木偶脚本运行,然后返回一个JSON对象,具有4个属性。这应该然后被存储在server.js变量结果(全球范围)

问题是,我的木偶脚本(通过模块调用/ require语句)没有,尽管我等待明确告诉它这样做。当调试程序没有等到我的木偶模块的完成,而不是仅仅完成该功能(app.listen)。 JSON的回报应该是通过我提供的API,而是结果是不确定的。

木偶剧本确实与内部的JSON是正确的所有变量结束。这使我相信,这个问题简直是明确脚本拒绝等待木偶的完成,阔步向前。我调试证实了这一点

CODE

在express.js


app.get('/api', (req, res) => {
  try {
    res.json(results);
    console.log('JSON SENT'.black)
  } catch(e) {
    console.error(e);
    res.send("SCRIPT NOT FINISHED OR FAILED");
  }
});

app.listen(port, async() => {
  results = await puppet.puppet('verbose');
  console.log(results);
})

在puppet.js

if(testPagesLive()) {
        let quoteMadeAndRetrieved;
        [optileadCredits, quoteMadeAndRetrieved] = await Promise.all([optiCheck(), runQuote()]);
        [quoteMade, quoteRetrieved] = quoteMadeAndRetrieved;
      }

return {
        sitesUp: sitesUp,
        optileadCredits: optileadCredits,
        quoteMade: quoteMade,
        quoteRetrieved: quoteRetrieved
      }
回答如下:

app.listen的第二个参数是一个回调函数,这意味着只有在应用程序中指定的端口已在侦听,它会尝试执行该功能。你所用results = await puppet.puppet('verbose');做有数据写入延迟到变量,但端口上没有延缓听力。如果要解决这个问题,你可以使它这样的应用程序侦听的端口上的函数执行完毕后,

(async ()=> {
    results = await puppet.puppet('verbose');
    app.listen(port, () => {
        console.log(results);
    })
})()

或者只是写承诺立即返回数据到结果变量

app.get('/api', (req, res) => {
    results.then(data => {
        res.json(data);
        console.log('JSON SENT'.black);
    });
});

app.listen(port, () => {
    results = puppet.puppet('verbose');
})
发布评论

评论列表(0)

  1. 暂无评论