Promise.all()中的承诺有时返回未定义/ crawler-request包nodejs [duplicate]

icomxhvb  于 2023-01-30  发布在  Node.js
关注(0)|答案(1)|浏览(133)
    • 此问题在此处已有答案**:

Promise.all is returning an array of undefined and resolves before being done(3个答案)
When should I use a return statement in ES6 arrow functions(6个答案)
3天前关闭。
我不确定我是否使用了promise.all错误,或者我用于远程检索pdf并解析这些文件的nodejs包是否一次被太多的请求淹没。
https://codesandbox.io/s/sharp-wave-qikvb//此处为代码和框
我试着用承诺。所有

let urls = [arrayofURLS];

function pdfData() {   
    return Promise.all(
          urls.map(item => {
            this.crawlPdf(item);
          })
        )
          .then(result => {
        // handle result
          })

}

这是使用Crawler程序包的函数(称为crawler-request):

crawlPdf: async function(Url) {

      return new Promise(async function(resolve, reject) {
      let response = await crawler(Url);
      resolve(response.text);
   }

5个请求中有2个通常是未定义的,但有时一切都是O.O.

6ju8rftf

6ju8rftf1#

你必须返回promises给all方法,现在你没有返回任何东西,所以看起来像Promise.all([undefined, undefined, undefined])
因为看起来你可以使用箭头函数,你可以把你的花括号换成圆括号,或者把它放在一行,完全去掉括号--这些格式总是返回函数体的结果。

urls.map(item => (
  this.crawlPdf(item)
));

urls.map(item => this.crawlPdf(item));

或者说得很明白

urls.map(item => { return this.crawlPdf(item) });

相关问题