Пример Q.denodeify не выполняется должным образом - PullRequest
0 голосов
/ 10 февраля 2020

Я новичок ie в узле, только пробуя пример использования Q. Я не могу распечатать журнал 'addition completed'. Я получаю 'inside 7' & '7' на выходе. Что я делаю неправильно?

Мой код

var Q = require('q');

function Add(callback){

    setTimeout(function(){
        var a, b, c;
        b = 3; 
        a = 4;
        c = a + b; 
        console.log("inside "+c);
        callback(c);
    }, 2000); 

}

var promise = Q.denodeify(Add);

function callback(x){
    console.log(x);
}

promise(callback).then(function(){
    console.log('addition completed');
});

Ответы [ 3 ]

0 голосов
/ 10 февраля 2020

Я немного подправил его и заставил работать. Но я не могу ясно понять, почему это сработало, а то, что до этого не получилось. Надеюсь, кто-то позвонит помочь с объяснением.

Мой новый код

var Q = require('q');

function Add(callback){

    setTimeout(function(){
        var a, b, c;
        b = 3; 
        a = 4;
        c = a + b; 
        console.log("inside "+ c);
        callback();

    }, 2000); 

}

var promise = Q.denodeify(Add);

promise().then(function(){
    console.log('addition completed');
});

0 голосов
/ 10 февраля 2020

вы можете использовать этот пример для обещания

 var Q = require('q');

    function add(callback){

        return new Promise(function ( resolve, reject) {
            setTimeout(function(){
                var a, b, c;
                b = 3;
                a = 4;
                c = a + b;
                console.log("inside "+c);
                callback(c);
                if(c){
                    resolve(c);
                }else{
                    reject();
                }
            }, 2000);

        });
    }

    //var promise = Q.nbind(add);

    function callback(x){
        console.log(x);
    }

    add(callback).then(function(){
        console.log('addition completed');
    }).catch(function (E) {
        console.log(E);
    });
0 голосов
/ 10 февраля 2020

Этот пример кода не отвечает на любые ваши вопросы о the q library.
Вместо этого он просто демонстрирует , как вы можете использовать обещание вместо обратного вызова для завершения асинхронная задача - которая кажется основной целью вашего кода.

(Для получения дополнительной информации и примеров вы можете проверить MDN: Promises )

Обратите внимание, что обещания являются альтернативой обратным вызовам, поэтому такое выражение, как promise(callback), обычно не пишется.

Кроме того, я только очень кратко рассмотрел q, но я думаю, что Q.denodeify, возможно, не является правильным методом , который следует использовать для задачи, которую вы пытаетесь выполнить sh ,

Для предложений, указывающих от c до q, вы также можете найти этот ответ полезным.

function add(){

  // Calling `add` will return a promise that eventually resolves to `7`
  // There is no way this particular promise can reject (unlike most promises)
  const myPromise = new Promise(function(resolve, reject) {

    // The anonymous function we pass to `setTimeout` runs asynchronously
    // Whevever it is done, it applies the promise's `resolve` function to `c`
    setTimeout(function(){
      const
        a = 4,
        b = 3,
        c = a + b;
      resolve(c);
    }, 200);
  });
  return myPromise;
}

// `add` returns a promise that always resolves to `7`
// The `.then` method of this promise lets us specify a function that 
//   does something with the resolved value when it becomes available
add().then(function(resolvedValue){
  console.log("addition result: " + resolvedValue);
});
...