【问题标题】:Synchronizing javascript functions with promises, socket.io emit用 Promise 同步 javascript 函数,socket.io 发出
【发布时间】:2021-01-19 05:45:05
【问题描述】:

我正在构建一个 Web 应用程序,并尝试使用 socket.io 的 emit() 以特定顺序将数据发送到服务器。基本上,我试图同步发送两组数据,然后在之前的两组数据(stepsfiles)完全发送后发送“提交”消息。我的问题是“提交”消息是在文件完成发送之前发送的。我正在尝试使用Promises,但它不起作用,我猜是使用错误。

sendToServer() {
    Promise.all([
        new Promise((res) => res(this.sendSteps())),
        new Promise((res) => res(this.sendFiles()))
    ]).then(this.sendSubmit());
}

更新:

我也试过了,但没有解决问题。 sendSubmit() 仍然在 sendFiles() 完成之前启动。

async sendToServer() {
    return new Promise((res, rej) => res(this.sendSteps()))
        .then(() => {
            return new Promise((res, rej) => res(this.sendFiles()));
        })
        .then(() => {
            return new Promise((res, rej) => res(this.sendSubmit()));
        });
}

【问题讨论】:

    标签: javascript asynchronous socket.io synchronous


    【解决方案1】:

    请像这样重写代码并告诉我。

    sendToServer() {
        Promise.all([
            new Promise((resolve, reject) => resolve(this.sendSteps())),
            new Promise((resolve, reject) => resolve(this.sendFiles()))
        ]).then(()=>{
            this.sendSubmit();
     });
    }
    

    【讨论】:

    • 谢谢,但问题似乎仍然存在。需要明确的是, this.sendSteps() 和 this.sendFiles() 本身不需要是承诺,对吧?它们可以只是正常的功能吗?
    • 根据你的代码 sn-p 这并不重要。
    猜你喜欢
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 2019-10-11
    • 2015-10-15
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 2018-01-02
    相关资源
    最近更新 更多