为了账号安全,请及时绑定邮箱和手机立即绑定

nodejs如何获得从异步回调的返回值?

nodejs如何获得从异步回调的返回值?

杨__羊羊 2018-09-04 13:17:19
    users.find({uname: this.uname, passwd: this.passwd}, (err, docs) => {        if (docs.length === 0) {            return true;        } else {            return false;        }    });        如题 想在数据库中匹配帐号和密码 然后返回一个值    但是显然捕捉不到 能否捕捉到异步执行完后的值    或者 同步怎么写??
查看完整描述

1 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

  • 没搞明白为啥要捕捉异步执行完后的值,你把你需要用到这个执行结果的业务逻辑,放到callback里面不久可以了么?

  • Promise能不能帮到你呢?

const find = (uname, passwd) => new Promise((resolve, reject) => {
  users.find({ uname, passwd }, (err, docs) => {    if(err) return reject(err)    if(docs.length === 0) return resolve(true)
    resolve(false)
  })
})

find(this.uname, this.passwd).then(result => {    // 获取到异步执行完后的值的业务代码
    console.log(result)
}).catch(err => console.error(err))
  • async/await Promise的优雅版

const isExist = async (uname, passwd) => {    try{        const result = await find({ uname, passwd }) // result is true of false
        // 获取到异步执行后的代码的业务逻辑 
    } catch(e) {
        console.error(e)
    }     
}
  • Generator

  • EventEmitter

写不下去了,我还是没搞懂你为啥要捕捉异步执行完后的值,那我为啥还要回答呢,哎!!好吧!理解不对的话就忽略。


查看完整回答
反对 回复 2018-10-16
  • 慕数据7393940
    慕数据7393940
    如果是要返回业务代码的result该怎么办呢?这个始终还是异步的,在find函数外得不到结果啊(return result;在find外面的取不到值的)。大神求教。
  • 1 回答
  • 0 关注
  • 2979 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号