【问题标题】:Promise.all() - How to resolve() without returning undefined or valuePromise.all() - 如何在不返回未定义或值的情况下解析()
【发布时间】:2016-02-15 15:50:19
【问题描述】:

我想使用Promise.all() 来检查一个值是否在数组中。我的问题是当在数组中找不到值时,承诺返回undefined,但我只想拥有在我的数组中找到的值。

var array = [1,5,10];
var values = [1,2,3,4,5,6,7,8,9,10];
var foundValues = [];

values.forEach(function(value) {
    foundValues.push(isInArray(array, value));
});

Promise.all(foundValues).then(function(values) {
    console.log(values) // [1, undefined, undefined, undefined, 5, undefined, undefined, undefined, undefined, 10 ]
});

function isInArray(array, value) {
    return new Promise(function(resolve, reject) {
        if (array.indexOf(value) > -1) {
            resolve(value); //here the value is returned
        } else {
            resolve(); //here undefined is returned
        }
    });
};

编辑:这个问题并不是真的要在数组中找到一个值,我只是选择这个简单的例子来说明我的问题。

【问题讨论】:

  • 您意识到有更好的方法来检查一个值是否在数组中,对吧?
  • 我假设您正在将此作为更复杂异步代码的示例,但真正的问题是什么?如果您没有找到任何值,那么 resolve() 有什么问题,因为您没有要解决的问题?
  • values = values.filter(x => typeof x !== 'undefined')?

标签: javascript promise


【解决方案1】:

这似乎是不可能的。我会将其归档为“合理的默认设置”,因为选择加入您想要的行为非常容易,但反之则不然。

例如:

Promise.all(foundValues)
  .then(function(values) {
     return values.filter(function(value) { return typeof value !== 'undefined';});
  })
  .then(function(values) {
    console.log(values) // [1, 5, 10]
  });

【讨论】:

    【解决方案2】:

    我认为不可能让Promise.all 做到这一点。 JavaScript Promise 中没有类似的功能。 Promise 不能在没有值的情况下使用 resolvereject

    这段代码能回答你的问题吗:values.filter(value => value !== undefined);(Chrome, Opera, Safari, Firefox(in-use version), and IE 9+ support Array.prototype.filter.)?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 2018-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多