JavaScript承诺无法解决

时间:2018-12-07 22:17:52

标签: javascript node.js mongodb promise

我无法使它正常工作,并且开始认为我对基本的东西误解了。我已经看过很多例子,但看不到自己在做错什么。

这是我的承诺:

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获得返回值,然后再继续...

1 个答案:

答案 0 :(得分:0)

  

matchNew()是一个函数,在完成保存到数据库后仅返回“ true”。

那不可能。它要么立即返回true,要么返回一个Promise,在完成时解析为true。因此:

 if (matchNew(id))

与:

 if (new Promise())

,这将直接进入分支,因为对象在javascript中是真实的。相反,您只想链接承诺:

 matchNew(id).then(matches => {
    if(matches) {
      /*...*/
    } else {
      /*...*/
    }
});