我只希望有一种方法可以在用户尝试运行它时为其添加15分钟的冷却时间...。
如果命令处于冷却状态,是否可以发送诸如'您处于(持续时间)的冷却时间之类的消息'
我现在拥有的代码
from scrapy.loader import ItemLoader
from digikala.items import DigikalaItem
class PromotionsSpider(scrapy.Spider):
name= 'promotions'
allowed_domains=['www.digikala.com']
def start_requests(self):
yield scrapy.Request(url= 'https://www.digikala.com/search/category-book/?type[0]=4844&pageno=1&last_filter=type&last_value=4844&sortby=4',
callback= self.parse)
def parse(self, response):
star=0
for product in response.xpath("//ul[@class='c-listing__items']/li"):
title= product.xpath(".//a[@class='js-product-url']/text()").get()
if product.xpath(".//div[@class='c-product-box__engagement-rating']/text()"):
star= float(str(product.xpath(".//div[@class='c-product-box__engagement-rating']/text()").get()))
else:
star=0
loader=ItemLoader(item=DigikalaItem(), selector=product)
absolute_url=product.xpath(".//a[@class='c-product-box__img c-promotion-box__image js-url js-product-item js-product-url']/img/@src").extract_first()
loader.add_value('image_urls', absolute_url)
image=loader.load_item()
if star>=3.5 and (discounted_amount>=5000 or discounted_percent>=10):
yield{
'image':image,
'title':title,
'star':star
}
答案 0 :(得分:1)
我认为您可以使用promise进行顺序处理和冷却:
var delay = function(s){
return new Promise(function(resolve,reject){
setTimeout(resolve,s);
});
};
delay().then(function(){
return delay(3000); // delay 3 sec
}).then(DoingSmth());
答案 1 :(得分:0)
您可以将上一个操作的时间戳记保存在变量中,并检查从现在到最后一个时间戳记之间经过的时间
let lastActionTime = new Date();
let cooldown = () => {
let timeElapsed;
let now = new Date();
//get the actual time elapsed in ms
timeElapsed = now - lastActionTime;
//check if the time elapsed is less than 15 minute or not
if(timeElapsed < 900000){
//if yes, return message with remaining time in seconds
console.log(`You are on cooldown, remaining time ${(900000-timeElapsed)/1000} seconds`);
} else {
//Do the requested action and re-assign the lastActionTime
console.log(`Hurray`);
lastActionTime = new Date();
}
}
答案 2 :(得分:0)
在SPA(单页应用程序)中执行此操作的正确方法是将过期时间保存为全局状态(例如,React中的Redux)-这样,用户可以浏览页面,并且“倒数”会仍然可以工作
如果您的应用不是SPA,则可以将到期日期保存在数据库中。
关于建议在同一页面上实现该功能的其他答案-不能期望用户在同一页面上停留15分钟。