javascript - 导出动态内容的 ES6 模块?
问题描述
这是一个关于如何处理 API 中不断变化的数据依赖关系的一般问题。
我在我的应用程序中依赖两个数据对象:
1. mycompanyProducts
2. mycompanySettings
产品对象如下所示:
{
"MYTHING01": {
"sku": "MYTHING01",
"name": "15-Pack",
"price": 30,
"shopifyData": {
"id": "7987037995068",
"product_id": "664292996940",
"price": "30.00",
"taxable": true,
"inventory_quantity": 10,
"weight": 2,
"weight_unit": "kg",
"lastFetched": {
"$date": "2018-05-09T14:16:57.209Z"
}
}
},
"MYTHING02": {
"sku": "MYTHING02",
"name": "5-Pack",
"price": 15,
"shopifyData": {
"id": "7836960168028",
"product_id": "645959671756",
"price": "15.00",
"taxable": true,
"inventory_quantity": 10,
"weight": 2,
"weight_unit": "kg",
"lastFetched": {
"$date": "2018-05-09T14:16:57.228Z"
}
}
}
}
设置对象仅包含应用程序设置,例如最大图像上传大小(以 MB 为单位)等。
这两个对象都来自 MongoDb 集合。
想法是这样的:我希望能够更新我的集合,并让我的 API 更新其依赖项,而无需重新构建。必须触发基于 Shopify webhook(其中一些更改的来源)等的 API 重建会非常麻烦。
每个产品都有一个shopifyData.lastFetched
时间戳,在访问数据时,如果时间戳超过过去的某个时间段(10 分钟),我想在继续之前刷新数据:
// Loop through each Shopify product and update the product in the db
await Promise.all(res.data.products.map(async (shopifyProduct) => {
const variant = shopifyProduct.variants.find(v => mySKUs.includes(v.sku))
product.shopifyData = {
...variant,
lastFetched: new Date(),
}
await product.save()
}))
问题是:如何构建我的 API 以使用更新依赖项?显然 ES6 模块是静态导出的,并且在重新构建应用程序之前不会改变。
我当然可以导出一个返回依赖项的函数,并在需要时调用这个函数来获取新的 deps,但问题是我的函数必须是async
,所以很难调用:
import React from 'react'
const deps = generateDeps() // can't use await in this scope...
此外,放在const deps = generateDeps()
我的文件顶部并不能真正解决问题,因为这将被评估一次,而且只有一次。
人们如何解决这个问题?
解决方案
导出一个函数并在您真正需要访问数据时调用它,而不是在模块的顶部。
推荐阅读
- sql - SQL dbms_output.put_line 格式化
- r - 在 r 中使用 optim 最大化函数,其中参数之一是整数
- python - 使用 URL 中的变量循环抓取网站中多个页面的数据
- javascript - 当我尝试在同一页面上创建两个滑块框时,它不起作用
- c++ - 使用模板进行堆栈实现;“名称后跟 :: 必须是类或命名空间”
- vb.net - 为什么我的 VB 程序抛出异常,抱怨 OleDbDataReader 已关闭,而它应该绝对打开?
- windows - 为什么我在任务计划程序中看不到我的任务
- css - 自动换行,分词 php html css
- python - Python groupby 在创建 bin 后返回 NaN 平均值
- c# - 下载许多视频后,HttpClient 中的 await httpClient.GetByteArrayAsync() 突然停止?