【问题标题】:Safe to resolve from inside a promise chain? [duplicate]从承诺链内部解决是安全的吗? [复制]
【发布时间】:2015-12-07 00:01:42
【问题描述】:

恐怕我的做法是完全错误的。

resolve() 或reject() 是否可以从一个promise 链IN 一个promise 中。

// Insert a new user by details into database
insert: function(username, name, email, gender, birthday, other) {
    return new Promise(function(resolve, reject) {

        // Base structure
        var new_user = {
            username: username,
            name: name,
            email: email,
            gender: gender,
            birthday: birthday
        };

        // Merge other data with base structure
        if(other != undefined) {
            new_user = _.merge(new_user, other);
        }

        var new_user_model = new UserModel(new_user);
        new_user_model.saveAsync(function(user) {
            return resolve(user); // Safe to resolve from inside a promise?
        });

        // OR... should I do it like this?
        var user = new_user_model.saveAsync(function(user) {
            return user;
        });
        return resolve(user);
    });
}

【问题讨论】:

  • 安全吗?是的。错误的?是的。

标签: javascript node.js promise bluebird


【解决方案1】:

这里实际上不需要resolvereject。你可以只返回从new_user_model.saveAsync 给你的承诺:没有必要用新的包装它。请尝试以下操作。

// Insert a new user by details into database
insert: function(username, name, email, gender, birthday, other) {

    // Base structure
    var new_user = {
        username: username,
        name: name,
        email: email,
        gender: gender,
        birthday: birthday
    };

    // Merge other data with base structure
    if(other != undefined) {
        new_user = _.merge(new_user, other);
    }

    var new_user_model = new UserModel(new_user);
    return new_user_model.saveAsync();

}

【讨论】:

    猜你喜欢
    • 2021-08-11
    • 2015-06-24
    • 2013-12-18
    • 2018-04-02
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    相关资源
    最近更新 更多