Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何正确使用q_Node.js_Promise_Q - Fatal编程技术网

Node.js 如何正确使用q

Node.js 如何正确使用q,node.js,promise,q,Node.js,Promise,Q,我试图学习如何使用q模块和去噪方法。当我运行代码时,我会在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) dis

我试图学习如何使用q模块和去噪方法。当我运行代码时,我会在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的其他示例,如Promisify fs.readFile:

从Node v10开始,Node中还内置了一个实验性的基于承诺的fs版本:

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

readFile(...).then(...)
还有一个称为util.promisify的q.denodify等价物:


你的代码中没有异步,为什么要使用承诺?Add不接受节点样式的异步回调,因此没有理由将其表示出来。与q模块的其余部分非常相似——实际上,q模块的其余部分是一个非常丰富的通用promise API。事实上,比当今大多数图书馆都要丰富得多,因为Q的开创性工作让我们获得了经验,其中哪些更有用,哪些更少需要。@Bergi fair:
const { readFile } = require('fs').promises;

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

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