如何正确使用q.denodeify

How to correctly use q.denodeify

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

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 开始,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(...);