Как правильно использовать q.denodeify - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь узнать, как использовать модуль q и метод denodeify. Когда я запускаю свой код, я вижу консольный журнал «Внутри 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")
})

1 Ответ

0 голосов
/ 08 января 2019

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, есть также (экспериментальная) версия fs на основе обещаний, встроенная в Node:

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