【发布时间】:2018-04-30 08:25:58
【问题描述】:
因此,解释这一点的最简单方法是,我正在尝试在您的 package.json 中搜索您的所有包,然后使用 npm 注册表查看是否有新的更新。我已经完成了大部分工作。接受以下 for 循环:
import request from 'request'
export const findAllUpdates = (packageInfo) => {
for(prop in packageInfo) {
request('https://registry.npmjs.org/' + prop, function(err, resp) {
json = JSON.parse(resp.body);
if (json['dist-tags'].latest !== packageInfo[prop].version) {
// Do something, we are not the same version so we should
// update some counter.
}
});
}
}
您的 packageInfo 是 key=>value 的对象,它代表 package.json 和 package-lock.json 或 yarn.lock 的依赖项或开发依赖项
重要的部分是我们在上面的函数中查看您安装的内容,然后我们使用注册表获取该软件包信息并将注册表中的最新版本与您安装的版本进行比较,然后我们想要,理想情况下,用总计数更新组件的状态。
问题是我们进入了回调地狱,尤其是使用 for 循环,循环每个包,发出请求。
我无法创建变量并将响应存储在其中,因为在发出请求后无法访问它。我看不出在这里使用事件是如何工作的,因为您可能安装了 40 个软件包作为 dep 或 dev 并且要触发很多事件。
最后,正确的解决方案可能是使用 Promise,但 Promise 的整个概念是更多的回调,带有 .then(() => {})、.catch(() => {}),这让我回到了原点。
目标是在一个组件中调用它,并使用必须更新的包的总数(或至少有新版本)更新该组件的状态
有什么想法吗?我是不是搞错了?
【问题讨论】:
标签: javascript json reactjs callback promise