我想使用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
}
});
};
编辑:问题不在于在数组中查找值,我只是选择这个简单的示例来说明我的问题。
答案 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}}无法Promise
或resolve
没有值。
此代码可以回答您的问题:reject
(Chrome,Opera,Safari,Firefox(使用中的版本)和IE 9+支持Array.prototype.filter
。)?