【问题标题】:Node.js - request to database and delayNode.js - 对数据库的请求和延迟
【发布时间】:2015-09-17 10:59:06
【问题描述】:

我在 Node.js 上有一个应用程序,由两个文件组成。第一个文件包含构造函数if(..) { ... } else { ... },第二个文件包含导致if() 中的参数的函数,并包含对数据库的请求。示例:

File_1(部分)

var args = require('./File_2');
if(args.test() && args.example()) {
    //action
}
else {
    //action
}

File_2(部分)

function test() {
    mysql.query('SELECT * FROM `table` WHERE `name` = "test"', function(err, rows) {
        if(rows.length == 0) {
            return false;
        }
        else {
            return true;
        }
    }
}

function example() {
    mysql.query('SELECT * FROM `table` WHERE `name` = "example"', function(err, rows) {
        if(rows.length == 0) {
            return false;
        }
        else {
            return true;
        }
    }
}

exports.test = test;
exports.example = example;

请求会在一段时间后出现,因此在 if() 参数中等于 undefined, undefined。如何使if/else构造等待请求结果?我有两个想法 - 承诺和模块async。我认为async - 错误的决定。在这种情况下如何使用承诺?哪种解决方案更可取?我会很高兴得到任何答案。

(抱歉英语不好。)

【问题讨论】:

  • 你不能做if (someAsyncCall())。不可能调用异步函数并使其表现得像同步函数一样。

标签: javascript database node.js


【解决方案1】:

async 是一个非常棒的库,但在 node 中你将使用回调(而不是返回)。这是一个例子:

var async = require('async')

function test(callback){
  //simulate one async method call
  setTimeout(function(){
    callback(null, "test_finished")
  },100)
}

function example(callback){
  //simulate another async method call
  setTimeout(function(){
    callback(null, "example finished")
  },500)
}

function compare(err, results){
  //results will maintain order of array in parallel
  console.log(results[0], results[1]);
}

async.parallel([
    example,
    test
], compare);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-11
    • 2021-03-12
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 2021-01-08
    • 2013-11-17
    相关资源
    最近更新 更多