使用bluebird promises,我试图检查文件的某个版本是否存在(这些文件中只有一个存在,但我不知道哪个文件存在)。为了加快速度,我使用any()集合来同时检出所有内容:
Promise.any([
fs.existsAsync('./foo/image1.jpg'),
fs.existsAsync('./foo/image2.gif'),
fs.existsAsync('./foo/image3.png')
]).then(function(result) {
console.log(result); //remains undefined
});
我总是得到一个未定义的结果。根据(How do I return the response from an asynchronous call?),这是已解决的承诺的正常行为。不过,我需要知道,我的三个承诺中的哪一个已经解决,或者我可能不能为此目的使用任何()?
答案 0 :(得分:1)
fs.exists()
的回调不遵循callback(err, value)
的预期调用约定,因此它不适用于通用promisify。它仅使用callback(value)
。
您可以改为使用fs.statAsync()
,也可以为fs.exists()
创建自己的可以正常使用的宣传方式。
当然,fs.exists()
因种族原因而被弃用,所以你或许应该在这里重新考虑你的策略。
这是一个适当宣传的fs.existsAsync()
:
fs.existsAsync = function(path) {
return new Promise(function(resolve) {
fs.exists(path, resolve);
});
}
在完成fs
模块的一般宣传后,您将分配此项,以替换Bluebird自动执行的错误fs.existsAsync
。