承诺永远不会被调用,或被拒绝(Parse JS SDK)

时间:2016-07-20 18:20:14

标签: javascript node.js parse-server

我正在尝试编写一个在User对象上添加或编辑某些字段的函数。

当我尝试保存用户时出现问题,如果我使用user.save,则承诺被拒绝且错误为206 UserCannotBeAlteredWithoutSessionError

但是,如果我得到会话ID(并且有关该文档的文档很少),则承诺永远不会得到解决,也不会被拒绝。该应用程序似乎只是跳转到回调。

我的功能:

function update(user, callback) {
    let query = new Parse.Query(Parse.User);

    query.equalTo("username", user.email);
    query.find().then(
        (users) => {
            if(users.length === 0) {
                callback('Non existent user');
            } else {
                let user = users[0];

                // user.set('some', 'thing');
                console.log('save');
                user.save(/*{
                    sessionToken: user.getSessionToken()
                }*/).then(
                    (test) => {
                        console.log('OK - ' + test);
                        callback();
                    }, (err) => {
                        console.log('ERR- ' + require('util').inspect(err));
                        // console.log(callback.toString());
                        callback(error.message);
                    }
                );
            }
        },
        (error) => {
            callback(error.message);
        }
    );
}

跟:

var async = require('async'),
    baas = require('./baas.js');

async.waterfall([
    (callback) => {
        callback(null, {
            email: 'user@test.com',
            password: 'password'
        });
    },
    (user, callback) => {
        console.log('connect');
        baas.connect(() => { //Initialize the connection to Parse, and declare use of masterKey
            callback(null, user);
        });
    },
    (user, callback) => {
        console.log('update');
        baas.update(user, (err) => {
            callback(err);
        });
    }
], (err) => {
    console.log('Error: ' + err);
});

日志变为: 没有会话令牌:

connect
update
save
ERR- ParseError { code: 206, message: 'cannot modify user sA20iPbC1i' }

使用会话令牌:

connect
update
save

我不明白承诺如何在不打印任何内容的情况下回调,也不知道为什么在任何地方都不会出现错误。

编辑:

根据@ user866762建议,我尝试将查询替换为Parse.User.logIn并使用生成的User对象。

虽然这个解决方案给了我一个sessionToken,但最终结果是相同的,如果我不提供会话令牌就解析崩溃,或者如果我这样做就给我一个错误。

1 个答案:

答案 0 :(得分:1)

根据Parse Dev guide

  

...除非使用经过身份验证的方法获取save,否则您无法调用任何deleteParse.User方法,例如logIn或{{ 1}}。

在保存之前,您也可以尝试使用becoming用户,但我对此有疑问。

当你“得到会话ID”时,我的猜测是你真的在破坏某些东西。无论是Parse对您要求会话令牌都有心脏病发作,或者当您在signUp中传递它时,您会导致某些事情爆炸。