javascript - 使用 BlueBird + React Native 过滤未定义的 promise

标签 javascript arrays rss promise bluebird

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

但是,有时某些 rss 提要已关闭或没有图像,这些 promise 会返回一个未定义的数组,该数组应如下所示:

enter image description here

所以我正在寻找一种方法来过滤掉这些不好的 promise 并保留好的 promise 。我对 Bluebird 和一般的 promise 非常陌生,非常感谢任何帮助。现在这是我的代码(根本不会过滤掉任何 promise ,但会合并它们的数组):

//combining promises
    var that = this; 
    return Promise.all(rss_feeds)
      .then((res) => {
          for (var q = 0; q < res.length; q++)
          {
            for (var a =0; a < res[q].length; a++)
            {
              final_array.push(res[q][a]);
            }
          }
          //console.log('The following array of objects was constructed and is now being shuffled');
          //console.log(final_array.length);
          that.shuffle(final_array);
          //console.log(final_array);
          return final_array;
      }); 

最佳答案

一旦值被包装在 Promise 中,检查它的唯一方法是使用 .then 方法。事实上,promise 如此强大的原因是 .then 允许在不关心其实际存在的情况下操纵包装的值。换句话说, promise 代表最终值的计算上下文。

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

这导致:

// 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 promises 的优势。

关于javascript - 使用 BlueBird + React Native 过滤未定义的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34271800/

相关文章:

javascript - 如何在 Material-ui 的 TableSortText 组件中自定义颜色文本和图标?

javascript - 将MySQL结果放入php变量

c - 我不明白为什么我的数组大小错误

ruby - 如何用不同长度的数组填充二维数组,使它们在 ruby​​ 中的长度都相同

jquery - 如何强制动态对象中的链接在新选项卡中打开?

javascript - 无法从字符串集合中找到 href 标签

arrays - `${1#*=}` 在 Bash 中意味着什么?

java - 如何使用 SimpleXML (java) 获取我的解析 ATOM 提要以返回省略号而不是 &#8230

emacs - 关于 emacs 中 rss 阅读器的任何建议

javascript - 普通函数和 IIFE 转换另一个函数的区别