gpt4 book ai didi

javascript - 创建可重用的 promise 链并将其应用到其他 promise 上

转载 作者:行者123 更新时间:2023-12-03 04:00:45 25 4
gpt4 key购买 nike

上下文:

我正在使用 node-horseman 进行网络抓取。情况是,在我让 headless 浏览器执行每个操作后,我通常想查看结果。

运行即可看到结果

horseman
.open('http://www.google.com')
.html()
.then((html)=>{
return new Promise((resolve, reject)=>{
console.log(html);
fs.writeFile("result.html", html)
resolve();
})
})
.screenshot("result.png")
.close();

它创建将 html 写入 result.html 并将渲染页面的屏幕截图写入 result.png

问题:

是否可以将该 Promise 字符串分配给变量或方法,然后应用它,而不是复制粘贴该 4 个 Promise 字符串?例如,

horseman
.open('http://www.google.com')
.preview_result()

哪里

function preview_result(){
return html()
.then((html)=>{
return new Promise((resolve, reject)=>{
console.log(html);
fs.writeFile("result.html", html)
resolve();
})
})
.screenshot("test.png")
.close();
}

var preview_result = 
html()
.then((html)=>{
return new Promise((resolve, reject)=>{
console.log(html);
fs.writeFile("result.html", html)
resolve();
})
})
.screenshot("test.png")
.close();

最佳答案

您可以以 Promise 作为输入的方式定义可重用函数:

function previewResult(openedUrl){
return openedUrl
.html()
.then((html)=>{
return new Promise((resolve, reject)=>{
console.log(html);
fs.writeFile("result.html", html, (error) => { // This way Promise will resolve only after the file was written
if(error) {
reject();
return;
}

resolve();
});
})
})
.screenshot("test.png")
.close();
}

此函数将返回 close() 函数返回的内容,如果它是 Promise,您可以简单地继续 Promise 链。

您可以这样使用它:

const openedUrl = horseman.open('http://www.google.com');
previewResult(openedUrl)
.then(() => { // Note that it will work only if close() returns a Promise
console.log('all done!')
});

另一种方法是使用 apply :

function previewResult(){
return this
.html()
.then((html)=>{
return new Promise((resolve, reject)=>{
console.log(html);
fs.writeFile("result.html", html, (error) => { // This way Promise will resolve only after the file was written
if(error) {
reject();
return;
}

resolve();
});
})
})
.screenshot("test.png")
.close();
}

const openedUrl = horseman.open('http://www.google.com');
previewResult.apply(openedUrl)
.then(() => { // Note that it will work only if close() returns a Promise
console.log('all done!')
});

但我没有看到它有任何显着的优势。

关于javascript - 创建可重用的 promise 链并将其应用到其他 promise 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44732491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com