Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用BlueBird+过滤未定义的承诺;自然反应_Javascript_Arrays_Rss_Promise_Bluebird - Fatal编程技术网

Javascript 使用BlueBird+过滤未定义的承诺;自然反应

Javascript 使用BlueBird+过滤未定义的承诺;自然反应,javascript,arrays,rss,promise,bluebird,Javascript,Arrays,Rss,Promise,Bluebird,我正在尝试获取多个rss提要,获取它们的每个承诺,并使用bluebird合并每个返回承诺的数组,以便为用户获取相关内容的数组 但是,有时一些rss源关闭或没有图像,这些承诺返回了未定义的数组位置,如下所示: 因此,我正在寻找一种方法来过滤掉这些不好的承诺,并信守好的承诺。一般来说,我对蓝鸟和承诺都很陌生,如果有任何帮助,我将不胜感激。下面是我的代码(它根本不过滤任何承诺,而是合并它们的数组): //组合承诺 var=这个; 返回承诺.all(rss_提要) 。然后((res)=>{ 对于(va

我正在尝试获取多个rss提要,获取它们的每个承诺,并使用bluebird合并每个返回承诺的数组,以便为用户获取相关内容的数组

但是,有时一些rss源关闭或没有图像,这些承诺返回了未定义的数组位置,如下所示:

因此,我正在寻找一种方法来过滤掉这些不好的承诺,并信守好的承诺。一般来说,我对蓝鸟和承诺都很陌生,如果有任何帮助,我将不胜感激。下面是我的代码(它根本不过滤任何承诺,而是合并它们的数组):

//组合承诺
var=这个;
返回承诺.all(rss_提要)
。然后((res)=>{
对于(var q=0;q
一旦值被包装在
承诺中,检查它的唯一方法就是使用
。然后使用
方法。事实上,承诺之所以如此强大,是因为
。然后
允许在不考虑其实际存在的情况下操纵包装的值。换句话说,承诺代表了最终价值的计算环境

因此,首先需要从承诺数组移动到包含
promise#all
的承诺数组,然后对最终的值数组进行推理(其中一些可能是
未定义的
)。之后,您可以过滤并返回仅包含所需值的新承诺

这导致:

// dummy values to simulate the use case
var arrayOfPromises = [Promise.resolve(1), Promise.resolve(undefined), Promise.resolve(2)]

var result = Promise.all(arrayOfPromises).then(ps => ps.filter(p => p));
result.then(console.log.bind(console));  // output: [1, 2]
请注意,Bluebird提供了一个额外的
Promise#filter
方法作为速记。然而,上面的代码具有与bluebird和本地ES6类似的优点

// dummy values to simulate the use case
var arrayOfPromises = [Promise.resolve(1), Promise.resolve(undefined), Promise.resolve(2)]

var result = Promise.all(arrayOfPromises).then(ps => ps.filter(p => p));
result.then(console.log.bind(console));  // output: [1, 2]