如何正确使用 async.map() ?
How do I use async.map() properly?
我正在尝试使用 async.map() 函数遍历单词数组并获取搜索结果。
该函数被赋予一组关键字,它访问 NYT API 以搜索和获取与关键字相关的文章。
这是我的代码片段:
const searchKeywords = (keywords, callback) => {
// list of keywords (for example: ["Joe Biden", "Manhattan", "U.S. Politics"])
let keywords_list = keywords
async.map(keywords_list, function(keyword, cb) {
// this is an Async function that accesses NYT API to fetch article data in JSON type
searchArticles(keyword, (error, results) => {
keyword = results
})
})
// return modified array to the callback function
callback(null, keywords_list)
}
例如,如果 searchKeywords 接收数组 ["Joe Biden", "Manhattan", "U.S.Politics"],
我希望使用如下所示的数组调用回调:
[{'Articles related to Joe Biden'}, {'Articles related to Manhattan'}, ...]
但显然,回调函数仍然得到不变的、只有关键字的初始数组。
是因为在 async.map() 中处理所有关键字之前就调用了回调吗?
const searchKeywords = (keywords, callback) => {
// list of keywords (for example: ["Joe Biden", "Manhattan", "U.S. Politics"]
const promise = new Promise((resolutionFunc, rejectionFunc) => {
resolutionFunc(
keywords.map((k) => {
//put search function here then return results
return null;
})
);
});
promise.then((result) => {
callback(result, keywords)
});
};
function onClickBtn() {
searchKeywords(['joe'], console.log);
console.log('this is executed before');
}
<button onclick="onClickBtn()">
search ['joe']
</button>
这个应该可以,我给你测试过了。您必须添加错误处理,但它正在完成工作。
基本上你定义了你的承诺,然后它被调用,当承诺被解决时回调被调用。
我正在尝试使用 async.map() 函数遍历单词数组并获取搜索结果。 该函数被赋予一组关键字,它访问 NYT API 以搜索和获取与关键字相关的文章。
这是我的代码片段:
const searchKeywords = (keywords, callback) => {
// list of keywords (for example: ["Joe Biden", "Manhattan", "U.S. Politics"])
let keywords_list = keywords
async.map(keywords_list, function(keyword, cb) {
// this is an Async function that accesses NYT API to fetch article data in JSON type
searchArticles(keyword, (error, results) => {
keyword = results
})
})
// return modified array to the callback function
callback(null, keywords_list)
}
例如,如果 searchKeywords 接收数组 ["Joe Biden", "Manhattan", "U.S.Politics"], 我希望使用如下所示的数组调用回调:
[{'Articles related to Joe Biden'}, {'Articles related to Manhattan'}, ...]
但显然,回调函数仍然得到不变的、只有关键字的初始数组。 是因为在 async.map() 中处理所有关键字之前就调用了回调吗?
const searchKeywords = (keywords, callback) => {
// list of keywords (for example: ["Joe Biden", "Manhattan", "U.S. Politics"]
const promise = new Promise((resolutionFunc, rejectionFunc) => {
resolutionFunc(
keywords.map((k) => {
//put search function here then return results
return null;
})
);
});
promise.then((result) => {
callback(result, keywords)
});
};
function onClickBtn() {
searchKeywords(['joe'], console.log);
console.log('this is executed before');
}
<button onclick="onClickBtn()">
search ['joe']
</button>
这个应该可以,我给你测试过了。您必须添加错误处理,但它正在完成工作。
基本上你定义了你的承诺,然后它被调用,当承诺被解决时回调被调用。