如何映射数组、创建承诺以及在解决时中断
How to map an array, create promises, and break when one resolves
我一直在使用 bluebird 库的 Promise.map 函数,它从它接收的数组中 return 向我发送一个已解决的承诺数组 - 它应该如此。
我只想在数组上映射直到它达到第一个解析,然后它并退出。
我目前拥有的是:
var Promise = require('bluebird');
let comparer = async function (img1, imgURLarray) {
const img = img1
new Promise.map(imgURLarray, function (imgurl) {
let img2 = new Promise(x => x(Jimp.read('https:' + imgurl)))
let diff = Jimp.diff(await img, await img2);
return diff.percent
}).then(function (res) {
console.log(res);
});
comparer(img1, imgURLarray)
参数 img1 是一个 Object
常量,而 imgURLarray 包含 200 多个 Strings
进行比较 1:1 - 通过库 Jimp。
而不是 return 包含 200 多个 Jimp.diff 对象的整个数组。我只想return第一个满足这个条件的:
(diff.percent < 0.01 ? return imgurl : --END MAP FUNCTION-- )
我调查了 Promise.some(),但由于我不是从一系列承诺开始的,所以我认为这行不通。有人知道怎么做吗?将不胜感激。
它可能比您预期的要简单得多:
async function comparer(img, imgURLarray) {
for (const imgurl of imgURLarray);
const otherimg = await Jimp.read('https:' + imgurl);
const diff = Jimp.diff(img, otherimg);
if (diff.percent < 0.01)
return imgurl;
}
throw new Error("no imgurl with diff.percent < 0.01 found"); // or whatever you want to do
}
我一直在使用 bluebird 库的 Promise.map 函数,它从它接收的数组中 return 向我发送一个已解决的承诺数组 - 它应该如此。
我只想在数组上映射直到它达到第一个解析,然后它并退出。
我目前拥有的是:
var Promise = require('bluebird');
let comparer = async function (img1, imgURLarray) {
const img = img1
new Promise.map(imgURLarray, function (imgurl) {
let img2 = new Promise(x => x(Jimp.read('https:' + imgurl)))
let diff = Jimp.diff(await img, await img2);
return diff.percent
}).then(function (res) {
console.log(res);
});
comparer(img1, imgURLarray)
参数 img1 是一个 Object
常量,而 imgURLarray 包含 200 多个 Strings
进行比较 1:1 - 通过库 Jimp。
而不是 return 包含 200 多个 Jimp.diff 对象的整个数组。我只想return第一个满足这个条件的:
(diff.percent < 0.01 ? return imgurl : --END MAP FUNCTION-- )
我调查了 Promise.some(),但由于我不是从一系列承诺开始的,所以我认为这行不通。有人知道怎么做吗?将不胜感激。
它可能比您预期的要简单得多:
async function comparer(img, imgURLarray) {
for (const imgurl of imgURLarray);
const otherimg = await Jimp.read('https:' + imgurl);
const diff = Jimp.diff(img, otherimg);
if (diff.percent < 0.01)
return imgurl;
}
throw new Error("no imgurl with diff.percent < 0.01 found"); // or whatever you want to do
}