【问题标题】:How to execute function after rendering except "setTimeout()"渲染后如何执行除“setTimeout()”之外的函数
【发布时间】:2020-10-03 06:42:39
【问题描述】:

环境

Jquery2.0.3

我想做什么

(如聊天应用程序信使)

选择图像文件并显示为预览

↓

提交

↓

删除预览地点

代码

async function send() {
    sendMessage(); // send text(omit detail)
    await sendImage(); // send image
    resetAfterSending(); // delete preview display
}

function sendImage() {
    return new Promise(res => {
        messages.append(`
            <div class=".preview-img">
                <img src="${$('.hoge2').find('img').attr('src')}">
            </div>
        `);

        return messages.ready(() => {
            return res();
        });
    });
}

function resetAfterSending() {
    /**
     * if I use hide() instead of remove(), element remains in DOM element(you can see in chrome elements panel)
     * But in this time, I need to delete in DOM element as well
     */
    $('.preview-img').remove();
}

麻烦

当我没有使用 async/await 时,resetAfterSendingMessage() 被执行并且 DOM 中没有 .preview-img 元素,所以我什至无法发送图像数据。 这就是为什么我尝试在顶部使用类似 async/await 的代码。

但是当我尝试这样更改↓时,可以发送图像。

function send() {
    sendMessage();
    sendImage(); 
    //**use setTimeout()  !!
    setTimeout(() => {
        resetAfterSending();
    },0);
}

我认为 async/await 执行了函数,但没有完成渲染。这会导致问题。 (我什至不知道这是不是真的)

如果我需要在渲染后执行函数,我需要像THIS LINK所说的那样使用setTimeout()?

如果有人知道方法而不是 setTimeout(),请在此处注释掉。你知道 setTimeout() 不是很酷,希望你明白我的意思。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    由于sendImage() 返回Promise,您可以使用.then()

    sendImage().then(() => resetAfterSending());
    

    【讨论】:

    • "then" 在完成函数后执行,但不是在完成渲染后执行,对吗?我只是这么认为,不幸的是我没有找到关于那个的文章。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 2021-04-25
    • 2020-01-22
    • 2012-10-16
    • 2023-03-11
    相关资源
    最近更新 更多