异步等待不解决/拒绝结果

时间:2018-10-01 17:49:53

标签: javascript express ecmascript-6 promise

这是我的异步等待代码示例

控制器

const {addUserInterestService} = require('../services/profile.js');
const addUserInterest = async  function (req,res,next){
    try{
        let params ={
            id:req.user.userId,
            userInterests:['5bb2597ca8729e19ddaf13a8']
        };
        let result = await addUserInterestService(params);
        console.log(result);
    }catch(error){
        console.log(error);
    }

}

/services/profile.js

    const User = require('../models/User');
    const addUserInterestService = async (params)=>{

        console.log(params);
        return new Promise((resolve,reject)=>{
            User.update({
                _id:params.id,
            },{
                '$addToSet':{userInterest:{'$each':params.userInterests}}
            })
        },(err,result)=>{
            console.log("async",err,result);
            if(err){
                reject(err,null);
            }
             resolve(null,result);
        })

    }

    module.exports ={
        addUserInterestService
    }

但是诺言没有在这里解决,即console.log(result);永远不会返回任何结果。

1 个答案:

答案 0 :(得分:0)

您服务中的功能有误。您的新Promise ...的结构已关闭。由于您使用的是异步/等待,因此可以执行此操作。

const addUserInterestService = async (params)=>{

    const result = await User.update({
      _id:params.id,
    },{
     '$addToSet':{userInterest:{'$each':params.userInterests}}
    });

    return result;

}

我猜User.update返回了一个Promise,所以您可以做到。

const addUserInterestService = (params)=> {

  return User.update({
    _id:params.id,
  },{
    '$addToSet':{userInterest:{'$each':params.userInterests}}
  });
}

如果您要使用新的Promise ...等,则可以这样做。

const yourFunction = () => new Promise((resolve, reject) => {
  // do whatever
  return resolve('data');
});