异步诺言循环?

问题描述 投票:0回答:2

我有以下代码注册了一系列socketio命名空间。逻辑部分依赖于数据库调用(通过sequelize),因此我需要使用的承诺。我想complete承诺解决所有的时候叫逻辑构造完成。我的问题是,虽然该complete承诺解决的emitInitialPackage()功能解决之前。

export class demoClass {
    public complete: Promise<boolean>;
    server: any;

    constructor(io: any) {
        this.server = io;
        this.complete = Promise.resolve(db.Line.findAll()).then(lines => {
                // do some mapping to generate routes and cells
                this.registerEndPoints(routes, [], cells);
            }).catch(err => console.log(err))
    }



registerEndPoints(routes: Array<string>, nsps: Array<any>, cells: Array<string>) {
        for (let i = 0; i < routes.length; i++) {
            nsps.push(this.server.of('/api/testNamespace/' + routes[i]));
            let that = this;
            const nsp = nsps[i];
            nsp.on('connection', function (socket) {
                that.emitInitialPackage(nsps[i], routes[i], cells[i]);
            });
        }
    }

    emitInitialPackage(nsp: any, name: string, cell: any) {
        return db.Line.find({/* Some sequelize params*/}).then(results => {
            nsp.emit('value', results);
        }).catch(err => console.log(err));
    }
}

我如何才能确保emitInitialPackage已完成complete结算前?

javascript typescript ecmascript-6 promise es6-promise
2个回答
© www.soinside.com 2019 - 2024. All rights reserved.