Javascript 异步函数未在等待时等待
在执行某些操作之前,我需要向下滚动。我的承诺功能不是排队等待。我怎样才能解决这个问题Javascript 异步函数未在等待时等待,javascript,asynchronous,async-await,es6-promise,asynchronous-javascript,Javascript,Asynchronous,Async Await,Es6 Promise,Asynchronous Javascript,在执行某些操作之前,我需要向下滚动。我的承诺功能不是排队等待。我怎样才能解决这个问题 let scrollingPromise = new Promise(async (resolve, reject) => { // I need this part to be done before resolving await page.evaluate(() => { const scrollingWindow = document.querySelect
let scrollingPromise = new Promise(async (resolve, reject) => {
// I need this part to be done before resolving
await page.evaluate(() => {
const scrollingWindow = document.querySelector('.section-layout.section-scrollbox.scrollable-y.scrollable-show');
var scrollCount = 0;
function scrollFunction(){
setTimeout(()=>{
scrollingWindow.scrollBy(0, 5000);
scrollCount++;
if(scrollCount < 5){
scrollFunction();
}
}, 3000);
};
scrollFunction();
});
// but it resolves instantly doesn't wait for previous await
resolve();
});
//this .then() runs before my scrolling
scrollingPromise.then(async () => {
// ...
}
let scrollingPromise=新承诺(异步(解析、拒绝)=>{
//我需要在解决问题之前完成此部分
等待页面。评估(()=>{
const scrollingWindow=document.querySelector('.section layout.section scrollbox.scrollable-y.scrollable-show');
var scrollCount=0;
函数滚动函数(){
设置超时(()=>{
scrollingWindow.scrollBy(0,5000);
scrollCount++;
如果(滚动计数<5){
滚动函数();
}
}, 3000);
};
滚动函数();
});
//但它立马就解决了,不必等待以前的等待
解决();
});
//此.then()在滚动之前运行
滚动承诺。然后(异步()=>{
// ...
}
您正在混合等待
和承诺语法。您正在等待一个不返回承诺的异步函数,因此它无法工作。我相信您正在尝试这样做:
let scrollingPromise = new Promise((resolve, reject) => {
page.evaluate(() => {
const scrollingWindow = document.querySelector('.section-layout.section-scrollbox.scrollable-y.scrollable-show');
var scrollCount = 0;
function scrollFunction() {
setTimeout(() => {
scrollingWindow.scrollBy(0, 5000);
scrollCount++;
if (scrollCount < 5) {
scrollFunction();
} else {
resolve() // <-- Done, resolve here
}
}, 3000);
};
scrollFunction();
});
});
let scrollingPromise=新承诺((解决、拒绝)=>{
page.evaluate(()=>{
const scrollingWindow=document.querySelector('.section layout.section scrollbox.scrollable-y.scrollable-show');
var scrollCount=0;
函数滚动函数(){
设置超时(()=>{
scrollingWindow.scrollBy(0,5000);
scrollCount++;
如果(滚动计数<5){
滚动函数();
}否则{
resolve()//您正在混合等待
和承诺语法。您正在等待一个不返回承诺的异步函数,因此它无法工作。我相信您正在尝试这样做:
let scrollingPromise = new Promise((resolve, reject) => {
page.evaluate(() => {
const scrollingWindow = document.querySelector('.section-layout.section-scrollbox.scrollable-y.scrollable-show');
var scrollCount = 0;
function scrollFunction() {
setTimeout(() => {
scrollingWindow.scrollBy(0, 5000);
scrollCount++;
if (scrollCount < 5) {
scrollFunction();
} else {
resolve() // <-- Done, resolve here
}
}, 3000);
};
scrollFunction();
});
});
let scrollingPromise=新承诺((解决、拒绝)=>{
page.evaluate(()=>{
const scrollingWindow=document.querySelector('.section layout.section scrollbox.scrollable-y.scrollable-show');
var scrollCount=0;
函数滚动函数(){
设置超时(()=>{
scrollingWindow.scrollBy(0,5000);
scrollCount++;
如果(滚动计数<5){
滚动函数();
}否则{
解决()//它不等待,因为它不返回允诺。这回答了你的问题吗?你应该返回一个允诺,因此你的新允诺
应该是你想在回调中返回的,而等待
它不等待,因为它不返回允诺。这回答了你的问题吗?你应该返回一个允诺,是吗o您的新承诺
应该是您希望在回调中返回的内容,而等待
I您如何知道这一点?我测试了它。函数没有达到其他条件。我的递归函数可能有问题。我正在尝试解决此问题。您能帮我吗?但它在哪里停止?您尝试过添加吗ngconsole.log()
到处都可以看到记录了什么以及它在哪里被阻塞了?我做到了。它到达了else,并且else中的console.log()工作,但随后抛出错误:未捕获引用错误:未定义resolve…如果我将resolve()更改为Promise.resolve(),则不会抛出错误,而是.then()仍然没有运行。噢,我怀疑page.evaluate
在Puppeter(或您正在使用的任何无头浏览器)的范围内运行,所以实际上,resolve()在这个范围内是未定义的。看看这个:你怎么知道的?我测试了它。函数没有达到其他条件。我的递归函数可能有问题。我正在尝试解决这个问题。你能帮我吗?但是它在哪里停止?你试着添加console.log()了吗
everywhere查看记录的内容和阻塞的位置?我做到了。它到达了else和console。else中的log()可以工作,但之后会抛出错误:未捕获引用错误:未定义resolve…如果我将resolve()更改为Promise.resolve(),则不会抛出错误,但会抛出.then()仍然没有运行。噢,我怀疑page.evaluate
是在Puppeter(或您正在使用的任何无头浏览器)的范围内运行的,所以实际上,resolve()在此范围内没有定义。请看以下内容: