Создание функции, которая возвращает PromiEvent, используя web3-core-promievent - PullRequest
0 голосов
/ 17 декабря 2018

Я попытался запустить следующий фрагмент, но безрезультатно.

Я нашел фрагмент здесь .

var Web3PromiEvent = require('web3-core-promievent');

var myFunc = function(){
    var promiEvent = Web3PromiEvent();

    setTimeout(function() {
        promiEvent.eventEmitter.emit('done', 'Hello!');
        promiEvent.resolve('Hello!');
    }, 10);

     return promiEvent.eventEmitter;
};


// and run it
myFunc()
.then(console.log)
.on('done', console.log);

Я всегда получаю такую ​​ошибку: TypeError: myFunc (...). Then (...). On не является функцией

Мне важнобыть в состоянии иметь возможность генерировать события из моей функции, которые сигнализируют о том, что что-то произошло во время выполнения функции.Я бы предпочел использовать синтаксис async / await, если это возможно.

Я действительно хотел бы избежать отправки аргументов обратного вызова в функцию, но иметь возможность обрабатывать события, как я считаю нужным, в разных частях кода.

1 Ответ

0 голосов
/ 17 декабря 2018

Я думаю, что вы неправильно прочитали документацию, вы можете связать метод .on с объектом Web3PromiEvent, но не с объектом Promise, возвращаемым .then

, поэтому вы можете связать .on или вы связываете .then

myFunc()
.then(console.log);

или

myFunc()
.on('done', console.log);

Как вы видите на изображении ниже, Promise, возвращаемый .then, не имеет .onПрилагается ли метод Promise, возвращаемый Web3PromiEvent.

enter image description here

Это оригинальный пример в doc

// in node.js
var Web3PromiEvent = require('web3-core-promievent');

var myFunc = function(){
    var promiEvent = Web3PromiEvent();

    setTimeout(function() {
        promiEvent.eventEmitter.emit('done', 'Hello!');
        promiEvent.resolve('Hello!');
    }, 10);

    return promiEvent.eventEmitter;
};


// and run it
myFunc()
.then(console.log); //see the semicolon
.on('done', console.log); //see the semicolon
...