昨天我遇到了这个问题,但是问我这个问题,我要求解决方案,所以我没有学到任何东西。我的代码看起来像这样:
_auth.signInWithFacebook(accessToken: null);
当我在const escapeStringRegexp = require('escape-string-regexp')
const name = 'foo'
db.stuff.find({name: new RegExp('^' + escapeStringRegexp(name) + '$', 'i')})
中记录User.findOne({'user.id': author.id}, 'id', function (err, userid) {
console.log(userid); //(1) executes after (2)
newCharacter.character.author = userid;
}).then(() => {
console.log('does it work? '+newCharacter.character.author); //(2) executes before (1): undefined
newCharacter.save(function(err, character) {
console.log('Success! ' +character.id);
});
});
时,由于某种原因,它仍然未定义。为什么会这样?
答案 0 :(得分:1)
你正在混合回调和承诺。我认为无法保证附加到findOne
的回调将在then
开始执行之前完成。
您可能想要做的是将用户ID传递给then
。
User.findOne({'user.id': author.id}, 'id'})
.then(userid => {
newCharacter.character.author = userid;
console.log('does it work? '+newCharacter.character.author);
newCharacter.save(function(err, character) {
console.log('Success! ' +character.id);
});
});
我发现这个资源非常有助于理解承诺:https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html