提问者:小点点

除“setTimeout()”外,如何在呈现后执行函数


jQuery2.0.3

(如chatapp messanger)

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

这是一个非常重要的问题

提交

这是一个非常重要的问题

删除预览位置

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执行函数,但没有完成呈现。 这就产生了问题。 (我甚至不知道是真是假)

如果我需要在呈现后执行函数,我需要像这个链接所说的那样使用setTimeout()?

如果有人不知道setTimeout(),请在这里评论一下。你知道setTimeout()不太酷,希望你明白我的意思。


共1个答案

匿名用户

由于SendImage()返回一个promise,因此可以使用.then()

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