美文网首页
用Rxjs的思路来处理PHP的回调地狱

用Rxjs的思路来处理PHP的回调地狱

作者: 茶艺瑶 | 来源:发表于2020-06-11 11:38 被阅读0次

RxPHP

最近最学习Rxjs,rxjs也叫响应式编程,在React和Angluer2使用的比较广泛,还有一点就是不要把Rxjs当作Promise来使用,虽然promise已经很不错了,可是在80%场景下需要promise写更多的代码才能实现rxjs的功能。如果你只是为了解决和接口之间的回调的那就不用用rxjs这种概念,因为他会把你的工作复杂话。

简介

Rxjs的内容可以概括为一个核心三个重点,核心就是Observable和Operators,三个重点分别是:

  1. observer
  2. Subject
  3. schedulers

其中众多的operator一直是我门学习Rxjs路上的拦路虎,文章主体内容也将是围绕这部分内容讲解。

这些东西自己去油管看吧,rxjs也准备第七版了。反正rxjs的概念很多,不过很适合做复杂的异步流。

RxJS 与 Promise 的3大重要不同点

image.png

PHP 回调地狱

说到回调调用,这里不得不提出PHP,我们先上一张图片,看看这个万恶的语言,虽然现在已经有laravel的collect(),不过有时候有些业务脱了collect()你就无法实现了


image.png

还是回到了php原生的回调地狱。

PHP数组操作麻烦

PHP 具有array_map、array_filter、array_reduce等用于阵列操作。
有许多函数可以由数组操作
基本上使用回调功能

我们看看写法

$languages = ['PHP', 'PYTHON', 'RUBY', 'GOLANG'];

$lengths = array_map(
    function ($lang) { return str_len($lang) },
    $languages
);

$filterd = array_filter(
    $lengths,
    function ($length) { return $length > 3 }
);

$sum = array_reduce(
    $filtered,
    function ($x, $y) { return $x + $y }
);

把它一个接一个地放在变量里是件麻烦事。

$languages = ['PHP', 'PYTHON', 'RUBY', 'GOLANG'];

$sum = array_reduce(
    array_filter(
        array_map(
            function ($lang) { return str_len($lang) },
            $languages
        ),
        function ($length) { return $length > 3 }
    ),
    function ($x, $y) {
        return $x + $y
    }
);

很难嵌套和查看,并且很难修改代码,而且很麻烦。

然逛现在用到Rxjs的概念的话

我们需要写引用一个rxphp的库

composer require reactivex/rxphp

我们的编写代码就可以编程这样

use Rx\Observable;
use Rx\Scheduler;
use Rx\Scheduler\ImmediateScheduler;

// 设置计划程序
$immediateScheduler = new ImmediateScheduler();
Scheduler::setDefaultFactory(function () use ($immediateScheduler) {
    return $immediateScheduler;
});

// 阵列处理
const languages = ['PHP', 'PYTHON', 'RUBY', 'GOLANG'];
Observable::fromArray(languages) // Observable
    ->map(function ($lang) { // Operator
        return str_len($lang);
    })
    ->filter(function ($length) { // Operator
        return $length > 3;
    })
    ->reduce(function ($x, $y) { // Operator
        return $x + $y;
    })
    ->subscribe( //Observer
        function ($sum) {
            print("$sum")
        },
        // 错误处理        
       function (\Exception $ex) {
            print($ex->getMessage())
        },
        // 结束处理
        function () {
            print('exit()')
        });

我处理问题的思路就边得更加清晰了。

相关文章

  • 用Rxjs的思路来处理PHP的回调地狱

    RxPHP 最近最学习Rxjs,rxjs也叫响应式编程,在React和Angluer2使用的比较广泛,还有一点就是...

  • Angular响应式编程RxJS

    Promise 主要功能,解决了回调地狱的问题 类比Promise和RxJS debounceTime GitBo...

  • 后端程序员的 JavaScript 之旅 - 回调地狱终结者

    回调地狱 对 JavaScript 程序员来说,处理回调是家常,但是处理层次过深的回调就没有那么美好了,下面的示例...

  • 浅谈js中的回调地狱问题

    一、什么是回调地狱 说起回调地狱 首先想到的是异步在js中我们经常会大量使用异步回调,例如使用ajax请求 我们来...

  • promise的使用

    1、promise是用来干什么的? 用来处理回调,避免回调地狱 用来更好地处理异步行为 坏的例子:AJAX多级嵌套...

  • 浅谈Promise实现

    Promise主要用于异步处理,用来解决传统的回调地狱问题。 它是把异步处理规范起来,采用统一的接口来编写,使得更...

  • Promise

    1.为什么需要Promise 回调地狱回调函数中嵌套回调Promise解决了回调地狱 2. Promise 的基本...

  • RxJS 快速入门

    这是一篇给新手的 RxJS 快速入门,它可能不精确、不全面,但力求对新手友好。 异步与“回调地狱” 我们都知道 J...

  • Promise

    什么是回调地狱 多层回调函数的相互嵌套,就形成了回调地狱 回调地狱的缺点: 代码耦合性太强,牵一发而动全身,难以维...

  • JavaScript异步编程:Generator与Async

    从Promise开始,JavaScript就在引入新功能,来帮助更简单的方法来处理异步编程,帮助我们远离回调地狱。...

网友评论

      本文标题:用Rxjs的思路来处理PHP的回调地狱

      本文链接:https://www.haomeiwen.com/subject/lutbtktx.html