Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 异步函数未在等待时等待_Javascript_Asynchronous_Async Await_Es6 Promise_Asynchronous Javascript - Fatal编程技术网

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您如何知道这一点?我测试了它。函数没有达到其他条件。我的递归函数可能有问题。我正在尝试解决此问题。您能帮我吗?但它在哪里停止?您尝试过添加吗ng
console.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()在此范围内没有定义。请看以下内容: