Асинхронное ожидание не разрешить / отклонить результат - PullRequest
0 голосов
/ 01 октября 2018

Вот мой пример кода для асинхронного ожидания

контроллер

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 голосов
/ 01 октября 2018

Неправильная функция в вашем сервисе.Структура вашего нового Обещания ... отключена.Поскольку вы используете async / await, вы можете сделать это.

const addUserInterestService = async (params)=>{

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

    return result;

}

Я предполагаю, что User.update возвращает обещание, так что вы можете сделать.

const addUserInterestService = (params)=> {

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

Если бы вы использовалиновое обещание ... и т. д. вы можете сделать.

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