【发布时间】:2020-01-12 16:54:28
【问题描述】:
我一直在使用 bluebird 库的 Promise.map 函数,该函数从它接收到的数组中返回一个已解决的承诺数组 - 应该如此。
我只想映射数组,直到它达到第一个解析,然后它并退出。
到目前为止我所拥有的是:
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。
而不是返回包含 200 多个 Jimp.diff 对象的整个数组。我只想返回满足此条件的第一个:
(diff.percent < 0.01 ? return imgurl : --END MAP FUNCTION-- )
我研究了 Promise.some(),但由于我不是从一系列承诺开始的,所以我认为这不会奏效。有人知道怎么做吗?将不胜感激。
【问题讨论】:
-
您是要一次启动所有 200 个 diff,还是一个接一个地尝试,直到找到满足您条件的一个?
-
Jimp.read究竟返回了什么?你能链接它的文档吗?将其包装在(其他?)承诺中似乎毫无用处。
标签: javascript node.js loops promise bluebird