我在这里有点停滞。
我正在创建一个快速应用程序,必须通过一个请求从Shopify商店中导出大量数据。
问题在于,当我达到2分钟标记时,请求再次被触发(由于默认超时为2分钟),因此我增加了server.setTimeout()
来考虑所需的时间。
因此,这使请求的触发时间固定在2分钟,但一旦我的请求完成,又由于某种原因再次提出了第二个请求。
以下是该问题的一个简单例子:
const express = require('express');
function sleep(ms){
return new Promise(resolve=>{
setTimeout(resolve,ms)
})
}
app.get('/export', async (req, res) => {
// Sleep for 2:03min
await sleep(123000);
console.log('Starting request');
res.status(200).send('Finish');
})
const server = app.listen(3000, () => {
console.log(`Example app listening on port ${port}`)
})
// Set timeout to 2:04min
server.setTimeout(124000);
如果您打开http://localhost:3000/export,则上述代码的结果将返回:
Starting request
<-开头
Starting request
<-在2:04标记
这是不是因为async / await而引起问题,因为似乎res.send()
从未触发?
有人可以澄清“为什么”发生这种情况,以及“如何”防止发生这种情况吗?
PS:我无法使用标记或其他方式来检查请求是否已经发出,因为APP需要为同时导出数据的用户和第二个请求工作是全新的。
答案 0 :(得分:1)
今天,我为此损失了大约4个小时,结论是我的隧道服务(http://serveo.net/)在完成导出的某个时间恰好触发了另一个请求。 (至于为什么,我对此没有答案)我仍然不确定这是否是正确的结论,但是切换到其他选项(或使用直接本地主机)并没有显示任何问题。>
我移至OpenVPN,所有问题都消失了。 Ngrok也可以,但是由于免费版本没有固定的URL(每天启动服务时都要更改App设置中的所有端点很痛苦),所以我选择了OpenVPN。
问题的根源是<ng-content select=".headerText{{some_id}}"></ng-content>
从未出于某种特定原因被解雇,或者如果确实不是,则被解雇。
感谢所有帮助。