我无法使它正常工作,并且开始认为我对基本的东西误解了。我已经看过很多例子,但看不到自己在做错什么。
这是我的承诺:
myPromise = new Promise ( resolve => {
if (matchNew(id)) resolve();
})
myPromise.then( () => {
console.log('resolved');
})
matchNew()是一个函数,在完成保存到数据库后仅返回“ true”。我的控制台确认发生了这种“ true”返回,但是代码没有等待它,并且上述承诺从未解决。
关于MatchNew()的目的,这是我的意思:它等待MongoDB确认写入成功,然后返回true。
function matchNew(id) {
/* do some stuff */
// update database
MongoPath.Match
.replaceOne( {'_id': m._id}, thisMatch, {writeConcern: { j: true}})
.then( (msg) => {
console.log(msg);
return true;
});
}
我想确保我的主要代码一直等到从matchNew获得返回值,然后再继续...
答案 0 :(得分:0)
matchNew()是一个函数,在完成保存到数据库后仅返回“ true”。
那不可能。它要么立即返回true
,要么返回一个Promise,在完成时解析为true
。因此:
if (matchNew(id))
与:
if (new Promise())
,这将直接进入分支,因为对象在javascript中是真实的。相反,您只想链接承诺:
matchNew(id).then(matches => {
if(matches) {
/*...*/
} else {
/*...*/
}
});