检查是否需要 JSON 是否有效 - 节点

check if required JSON is valid - node

如果我需要一个文件作为

require('file.json'); 

我该如何检查 JSON 是否有效?试着抓? 我正在使用 bluebird promises,所以现在它刚刚返回

 Promise.resolve(require('file.json')); 

如果找不到文件,bluebird 会捕获,但我还需要检查 JSONs 的完整性。我知道你可以将 JSON.parse 传递给 thenable 如果文件本身由 FS 或其他任何东西作为字符串返回但我不介意缓存和要求会更快

的问题
Promise.resolve(require('file.json')); 

是运行为

var obj = require('file.json'); 
Promise.resolve(obj); 

这意味着如果 require 抛出,promise 将无法捕获它。相反,我建议做

new Promise(function(resolve){
    resolve(require('file.json'));
})

这从承诺内部执行 require,因此抛出的错误将被正确捕获。

您正在寻找 Bluebird try function。如果您使用 resolverequire() 调用可能会在其结果包装在承诺中之前抛出。

Promise.try(require, 'file.json')
Promise.try(() => require('file.json')) // Bluebird 3.0

交替使用

Promise.resolve('file.json').then(require)
// or
Promise.method(require)('file.json')