【问题标题】:Convert callback code into async code in nodejs在nodejs中将回调代码转换为异步代码
【发布时间】:2018-09-04 03:44:51
【问题描述】:

我是 javascript 和 nodejs 的新手。我想在异步函数中转换回调函数。谁能帮我举个例子?

例如:

exports.list = function(req, res){

  req.getConnection(function(err,connection){

        var query = connection.query('SELECT * FROM customer',function(err,rows)
        {

            if(err)
                console.log("Error Selecting : %s ",err );
            res.send(rows);

         });

         //console.log(query.sql);
    });

};

是列出数据库中所有用户的回调。我想使用像 async.paralel()async.series() 等异步模块的功能来做到这一点......

【问题讨论】:

  • 请发样张
  • 一般情况下,您不能将任何函数转换为异步函数。您可以安排它稍后运行,但如果它是同步的,那么您不能使其异步。只有在您发布有问题的代码时,我们才能真正为您提供帮助。关于代码的问题应该在问题中包含相关代码。
  • 抱歉不包括代码。我编辑了我的问题。你能帮忙吗? @jfriend00
  • 仅供参考,promises 是处理和协调异步操作的现代方式,而不是异步库。

标签: javascript node.js asynchronous callback


【解决方案1】:

编辑:

我最近的做法有点不同:

const { promisify } = require('util');
const { readFile } = require('fs');
const asyncReadFile = promisify(readFile);

asyncReadFile('foo.txt').then(data => {})

// or using async/await

async function doSomething () {
  const data = await asyncReadFile('foo.txt');
}

原答案:

你可以使用util.promisify,它是 Node.js 自 v8.0.0 以来的本机。完整的文档可在here 获得,但简而言之,它看起来像这样:

const util = require("util");
const fs = require("fs");

util.promisify(fs.readFile)("foo.txt").then(data => {
  // Do something with data.
});

或者async/await:

async function readFileAsPromise() {
  return await util.promisify(fs.readFile)("foo.txt");
}

readFileAsPromise().then(data => {
  // Do something with data.
});

【讨论】:

    【解决方案2】:

    你可以试试蓝鸟http://bluebirdjs.com/docs/getting-started.html

    像这样工作

    var fs = require("fs");
    Promise.promisifyAll(fs);
    // Now you can use fs as if it was designed to use bluebird promises from the beginning
    
    fs.readFileAsync("file.js", "utf8").then(...)
    

    【讨论】:

    • 你能在不使用承诺的情况下给我建议吗?
    • 你会建议什么而不是承诺@vaibhavkaushik?
    • @vaibhavkaushik 你可以使用观察者,任何你不想使用承诺的理由。
    • @vaibhavkaushik 异步函数使用 promises 或 async/await(它们基本上是一样的)。
    • 正如我所说,我是 javascript 和 node 的新手,还没有明确承诺的概念。 @rajansoft1
    猜你喜欢
    • 2015-04-15
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 2018-07-12
    • 2015-02-24
    • 2023-03-12
    • 2013-07-01
    • 1970-01-01
    相关资源
    最近更新 更多