java嵌套地狱_解决java回调地狱的方法_沃航科技

最近小沃正在研究vert.x框架,这套基于netty的框架,大量使用了异步IO,因此在并发性能上比类似tomcat这类框架要高得多,但是高性能也带来了一些麻烦,那就是大量使用了回调函数。由于大量使用了回调函数。当需要回调嵌套时,就会陷入回调地狱,之前使用nodejs时,有Promise,同时还有类似async与await等方式,但是在vert.x中,包括java8中都没有类似的方法。

没办法,小沃就只有自己写一个java版本的Promise类了。

考虑到实际使用很有可能是如下结构:new Promise() {

@Override

public void run(int n) {

System.out.println("hello1 n:" + n);

this.resovle(1);

}

}.then(new Promise() {

@Override

public void run(int n) {

System.out.println("hello2 n:" + n);

this.resovle(2);

}

}).then(new Promise() {

@Override

public void run(int n) {

System.out.println("hello3 n:" + n);

this.resovle(3);

}

}).then(new Promise() {

@Override

public void run(int n) {

System.out.println("hello4 n:" + n);

}

}).end();

因此需要先注册完毕最后的一个then,然后再一个一个执行里面的方法。

下面是我自己写的一个Promise.java文件public abstract class Promise {

private Promise lastPromise = null;

private Promise beforePromise = null;

public void end () {

if (beforePromise != null) {

beforePromise.end();

} else { // 寻找第一个Promise对象,然后执行它

run(0);

}

}

public Promise then (Promise lastPromise) {

if (lastPromise == null) {

end ();

return null;

}

this.lastPromise = lastPromise; // 赋值当前的Promise对象下一个Promise对象引用

lastPromise.beforePromise = this; // 赋值下一个Promise对象,它的上一个对象引用

return lastPromise;

}

public void resovle (int n) { // 这里的n是一个参数用户传递给下一个run,根据需求类型可以更改

if (lastPromise == null) {

return;

}

beforePromise = null; // 将上一个Promise的指针置空,方便gc回收

lastPromise.run(n); // 执行下一个Promise的run方法

}

public abstract void run(int n); // 这里的类型要与resovle的类型一致

}

在需要回调的地方使用这个方式,会简化代码编写难度。听说java的rxjava也可以实现类似功能,只是还没有时间研究而已。

文章作者:沃航科技

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值