如何正确使用 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>

这个应该可以,我给你测试过了。您必须添加错误处理,但它正在完成工作。

基本上你定义了你的承诺,然后它被调用,当承诺被解决时回调被调用。