创建使用web3-core-promievent返回PromiEvent的函数

时间:2018-12-17 12:52:38

标签: javascript events web3

我尝试运行以下代码段,但无济于事。

我找到了代码段here

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 :(得分:1)

我认为您误读了文档,可以将.on方法链接到Web3PromiEvent对象,但是不能链接到Promise返回的.then对象。

因此您可以链.on或链.then

myFunc()
.then(console.log);

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

正如您在Promise返回的.then下图中看到的那样,Promise返回的Web3PromiEvent是否附加了.on方法。

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