Promise.all() - 如何解析()而不返回undefined或value

时间:2016-02-15 15:50:19

标签: javascript promise

我想使用Promise.all()检查某个值是否在数组中。我的问题是当在数组中找不到值时,promise返回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
        }
    });
};

编辑:问题不在于在数组中查找值,我只是选择这个简单的示例来说明我的问题。

2 个答案:

答案 0 :(得分:4)

这似乎不可能。我会把它作为一个理智的默认值"来归档,因为很容易选择你想要的行为,但反过来并不是真的。

E.g:

string[][] chords = new string[][]
{
    new string[] { "G","D" },
    new string[] { "C" },
    new string[] { "Am", "C" }

};

答案 1 :(得分:3)

我认为Promise.all无法做到这一点。 JavaScript Promise中没有类似的功能。 <{1}}无法Promiseresolve没有值。

此代码可以回答您的问题:reject(Chrome,Opera,Safari,Firefox(使用中的版本)和IE 9+支持Array.prototype.filter。)?