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
相关产品推荐
相关产品推荐

