You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pageres(phantomjs)多网址截图不返回Promise问题求助

问题分析与解决方案

为什么第一个示例正常,第二个不行?

第一个示例中,你是直接返回了run()方法生成的Promise:整个链式调用的结尾是.run().then(...),而run()本身会返回一个Promise,所以你的函数最终返回的是这个Promise对象,自然能正常触发then/catch逻辑。

而第二个示例里,你在调用完pages.run().then(...)之后,最后return pages;返回的是Pageres的实例对象,不是run()生成的Promise。这就是为什么你得不到预期的Promise返回值。

如何让第二个示例返回Promise?

只需要把返回的对象换成run()启动的Promise链即可,不用单独返回Pageres实例。修改后的代码如下:

let pages = new Pageres({});
urls.forEach((url) => { pages.src(url, size); });

// 返回整个Promise链,而不是pages实例
return pages
 .dest(dest)
 .run()
 .then((result) => { 
     console.log("done"); 
     return result; 
 })
 .catch((error) => { 
     console.log("error", error); 
     throw error; 
 });

更简洁的写法(可选)

其实Pageres的src()方法支持批量传入URL配置,你可以不用forEach,直接把URL数组转换成符合要求的格式传入,代码会更简洁:

return new Pageres({})
  // 把urls数组转换成[url, size]的格式批量传入
  .src(urls.map(url => [url, size]))
  .dest(dest)
  .run()
  .then((result) => { 
      console.log("done"); 
      return result; 
  })
  .catch((error) => { 
      console.log("error", error); 
      throw error; 
  });

这样既保持了Pageres的链式调用风格,也避免了手动遍历数组的步骤,逻辑更清晰。

内容的提问来源于stack exchange,提问作者Hansinger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:30:42