对不起,node.js的新手
我想从首先满足条件的数组中返回一个值。请参见下面的最小示例:
var urlExists = require('url-exists');
arr = ['http://123123123.com/', 'https://www.google.com/', 'https://www.yahoo.com/']
const found = arr.find(url => urlExists(url, function(err, exists) { return exists } ));
// expecting google.com
不确定如何使urlExists(...)
评估为true
。
答案 0 :(得分:2)
您可以在此处使用Promises。首先,您可以将.map()
的URL数组转换为一个Promises数组,这些Promises数组是根据给定URL是否调用urlExists
错误而拒绝还是解决。
一旦有了一个诺言数组,就可以将其传递给对Promise.all()
的调用,这将返回一个新的诺言。此承诺解决后,它将包含一个[[url1, existsStatus1], ...]
形式的数组,然后您可以使用.find()
来查找existsStatus
为true的第一个匹配项:
const urlExists = require('url-exists');
const arr = ['http://123123123.com/', 'https://www.google.com/', 'https://www.yahoo.com/'];
const urlPromise = Promise.all(arr.map(
url => new Promise((res, rej) => urlExists(url, (err, exists) => err ? rej(err) : res([url, exists])))
));
urlPromise.then((arr) => {
const [found] = arr.find(([,exists]) => exists) || [];
console.log(found); // URL found, undefined if nothing found
}).catch((err) => { // error with handling one of the URLs
console.error(err);
});