Q.js - Использование отложенных - программирование
Подтвердить что ты не робот

Q.js - Использование отложенных

Как получить значение текста из приведенного ниже примера?

Q.js имеет пример использования Deferred:

var deferred = Q.defer();
FS.readFile("foo.txt", "utf-8", function (error, text) {
    if (error) {
        deferred.reject(new Error(error));
    } else {
        deferred.resolve(text);
    }
});
return deferred.promise;

В этом случае используется асинхронная функция node. То, что я хочу сделать, это получить значение текста из отложенного. Когда я console.log(отложен.), Я получаю следующее:

{ promiseSend: [Function], valueOf: [Function] }

Что я делаю неправильно (поскольку я просто копировал/вставлял пример здесь: https://github.com/kriskowal/q#using-deferreds) или что еще мне нужно действительно ли получить этот текст из файла?

Я знаю, что node.js имеет синхронную версию вызова выше - моя цель - понять, как отложенная работа с этой библиотекой.

4b9b3361

Ответ 1

Вы можете получить значение с помощью метода .then() обещания:

function read() {
    // your snippet here...
}

read().then(function (text) {
    console.log(text);
});

Кроме того, обработчики ошибок могут передаваться либо как 2-й аргумент в .then(), либо с помощью метода .fail():

read().fail(function (err) {
    console.log(err);
});

Ответ 2

См. https://github.com/kriskowal/q#adapting-node

Можно переписать в nodejs-like:

var read = Q.nfcall(FS.readFile, FS, "foo.txt", "utf-8");
read().then( function (text) { console.log(text) } );

Ответ 3

Q = require('q');
FS = require('fs');

function qread() {
  var deferred = Q.defer();
  FS.readFile("foo.txt", "utf-8", function (error, text) {
    if (error) {
  deferred.reject(new Error(error));
    } else {
  deferred.resolve(text);
    }
  });
  return deferred.promise;
};   

var foo = qread();

setTimeout(function() {
  console.log(""+foo);
},1000);

Странно, что вы не можете видеть вывод для console.log(foo). Не знаю, почему.

Посмотрите еще несколько примеров https://github.com/kriskowal/q/wiki/Examples-Gallery

Ответ 4

deferred.promise.then(function (text) {
  console.log(text); // Bingo!
});

Ответ 5

Q = require('q');
FS = require('fs');

var deferred = Q.defer();
FS.readFile("client-02.html", "utf-8", function (error, text) {
  if (error) {
    deferred.reject(new Error(error));
    } else {
    deferred.resolve(text);
    }
return deferred.promise.done( setTimeout(console.log(text),1000 ));
});