首页 > 解决方案 > 从函数返回后是否可以触发事件?

问题描述

我正在开发一个使用我不久前写的 REST API 的 JavaScript 项目。我正在使用 Axios 向 API 发出 get/post/put/delete 请求。我有一个异步函数“删除”:

async delete(resource, data) {
    try {
        var resp = await axios.delete(this.buildUrl(resource), { data });
        var event = new CustomEvent('ApiDELETE', {
            detail: {
                resource_type: resource,
                request_params: data,
                response: resp.data
            }
        });
        document.dispatchEvent(event);
        return resp.data;
    } catch(error) {
        throw error;
    }
}

我试图在删除调用返回后立即触发 CustomEvent。例如,我有一个想要运行的函数,但我需要确保它一直等到删除特定资源并处理响应。因此,我对 ApiDELETE 事件有一个事件侦听器,该事件将在事件触发时运行。

var theDataWeNeed = await api.delete("resource", data);

document.addEventListener("ApiDELETE", (event) => {
    console.log(theDataWeNeed);
});

这样做的问题是我需要等到resp.data返回,因为事件处理程序运行的函数依赖于设置为delete函数返回值的变量。

delete函数返回后是否可以始终触发事件?

PS 是的,我知道在这个特定的示例中,我可以完全忘记事件并将控制台日志放在等待语句之后。但是,我正在寻找一个更强大的解决方案,让我能够参与这些事件。

标签: javascriptasync-awaitdom-events

解决方案


推荐阅读