javascript - nodejs如何获得从异步回调的返回值?
巴扎黑
巴扎黑 2017-04-11 13:03:43
[JavaScript讨论组]
    users.find({uname: this.uname, passwd: this.passwd}, (err, docs) => {
        if (docs.length === 0) {
            return true;
        } else {
            return false;
        }
    });
    
    如题 想在数据库中匹配帐号和密码 然后返回一个值
    但是显然捕捉不到 能否捕捉到异步执行完后的值
    或者 同步怎么写??
巴扎黑
巴扎黑

全部回复(2)
大家讲道理
  • 没搞明白为啥要捕捉异步执行完后的值,你把你需要用到这个执行结果的业务逻辑,放到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

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

大家讲道理

find如果从数据库匹配到了用户名和密码的话,返回的doc应该会将匹配项包装成数组吧,那么它的length应该不会是0,如果匹配不到才是0,因为返回的doc是空数组。我用mongoose的find的时候就得出这样的结论,不知题主所用的是不是也是如此。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号