如何等待 数据库取值完成后 执行下一步
发布于 7 年前 作者 vmvz 4118 次浏览 来自 问答

第一天学 nodejs,以前一直用py。 麻烦问问大家,如果等数据库的x值取出,再执行下一步? 谢谢!

if (requestDetail.url.indexOf('h') === 0) {
    var ssdb = require('ssdb');
    var pool = ssdb.createPool({host: '10.1.2.5', port: '8888', size: 15});
    var conn = pool.acquire();
    var x = conn.qpop('co', function (err, data) {
        if (err) {
            console.log(err);
        }
        console.log('Q push co: ' + data);
        return data;
    });
    
    //取数据库的值,是异步的,所以返回的x是空的。如果在这里等待数据库取值完成呢?
    return {
        requestData: 'i-am-anyproxy-modified-post-data' + x
    };
}
2 回复

在node里面,你需要在回调函数里面取值然后继续业务逻辑。也可借助thunk promise async 等来简化代码。

如果你想像 python 一样,直接拿到return 返回值,你应该需要协程类解决方案,如 https://github.com/fibjs/fibjs

@ngot 我是为了写 anyproxy的代理规则才来接触 nodejs的。

这个return必要在这个位置,不能放进另一层里面。

我今天在看一下 async

return {
        requestData: 'i-am-anyproxy-modified-post-data' + x
    };
回到顶部