如何正确使用q.denodeify



我正在尝试学习如何使用q模块和denodeify方法。当我运行代码时,我看到控制台日志"Inside Add()",但没有记录任何其他内容。我希望代码也记录"加法函数已完成"。有人可以告诉我我的代码哪里出了问题吗?

var Q = require('q')
function Add() {
    var a, b, c
    a = 5
    b = 6
    c = a + b
    console.log("Inside Add()")
}
var display_promise = Q.denodeify(Add)
display_promise().then(function() {
    console.log("Addition function completed")
}, function() {s
    console.log("Error")
})

denodify只对使用接受回调函数的典型 Node.js 习语的函数有意义,因为这些函数执行异步操作。该函数Add两者都不执行。

您可以重写它以接受完成后将调用的回调:

function Add(callback) {
    var a, b, c
    a = 5
    b = 6
    c = a + b
    console.log("Inside Add()")
    callback();
}

但是,严格来说,这没有多大意义,因为Add仍然只执行同步代码。

你也可以添加一些不同步性:

function Add(callback) {
    console.log("Inside Add()")
    setTimeout(function() {
      var a, b, c
      a = 5
      b = 6
      c = a + b
      callback();
    }, 2000);
}

Q的文档显示了q.denodify的其他例子,比如承诺fs.readFile

var readFile = Q.denodeify(fs.readFile);
readFile("foo.txt", "utf-8").then(...);

从 Node v10 开始,还有一个(实验性)基于 promise 的 Node 内置fs版本:

const { readFile } = require('fs').promises;
readFile(...).then(...)

还有一个q.denodify等价物称为util.promisify

const util = require('util');
const fs = require('fs');
const readFile = util.promisify(fs.readFile);
readFile(...).then(...);

相关内容

  • 没有找到相关文章

最新更新