首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我想在laravel中运行一个异步调用,然后返回true。RETURN TRUE不必等待异步调用完成

在Laravel中实现异步调用并立即返回true的方法是使用队列和事件。以下是一个完整的解答:

在Laravel中,可以使用队列和事件来实现异步调用并立即返回true。具体步骤如下:

  1. 首先,确保你已经配置好了队列驱动,可以使用Laravel自带的数据库驱动或者其他支持的驱动。你可以在配置文件config/queue.php中进行相应的配置。
  2. 创建一个新的任务类,用于处理异步调用的逻辑。可以使用以下命令生成一个新的任务类:
代码语言:txt
复制
php artisan make:job MyAsyncJob

这将在app/Jobs目录下生成一个名为MyAsyncJob的任务类。

  1. 在生成的任务类中,实现handle方法来处理异步调用的逻辑。例如:
代码语言:txt
复制
public function handle()
{
    // 异步调用的逻辑代码
    // ...

    // 触发一个事件,表示异步调用已完成
    event(new MyAsyncJobCompleted());
}
  1. 创建一个新的事件类,用于表示异步调用已完成。可以使用以下命令生成一个新的事件类:
代码语言:txt
复制
php artisan make:event MyAsyncJobCompleted

这将在app/Events目录下生成一个名为MyAsyncJobCompleted的事件类。

  1. 在生成的事件类中,不需要添加任何逻辑代码,因为它只是用于表示异步调用已完成。
  2. 在需要进行异步调用的地方,使用以下代码将任务推送到队列中:
代码语言:txt
复制
MyAsyncJob::dispatch()->onQueue('my-queue');

这将把MyAsyncJob任务推送到名为my-queue的队列中。

  1. 在需要返回true的地方,可以立即返回true,而不需要等待异步调用完成。例如:
代码语言:txt
复制
return true;
  1. 如果需要在异步调用完成时执行一些其他操作,可以监听MyAsyncJobCompleted事件,并在相应的事件监听器中添加逻辑代码。可以使用以下命令生成一个新的事件监听器类:
代码语言:txt
复制
php artisan make:listener MyAsyncJobCompletedListener --event=MyAsyncJobCompleted

这将在app/Listeners目录下生成一个名为MyAsyncJobCompletedListener的事件监听器类。

  1. 在生成的事件监听器类中,实现handle方法来处理异步调用完成时的操作。例如:
代码语言:txt
复制
public function handle(MyAsyncJobCompleted $event)
{
    // 异步调用完成后的操作代码
    // ...
}

以上是在Laravel中实现异步调用并立即返回true的方法。通过使用队列和事件,可以将异步调用的逻辑与主线程分离,实现异步处理,并在需要时返回true。对于异步调用完成后的其他操作,可以使用事件监听器来处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

基于 Redis 在 Laravel 实现消息队列及底层源码探究

消息队列简介 一个完整的队列系统由以下三个组件组成: 队列(Queue) 消息(Message) 处理进程(Worker) 对应的基本工作流程是生产者(业务代码)先将消息数据推送到队列,然后再通过其他的处理进程来消费队列的消息数据...,通常是一个字符串,如果是非字符串类型,可以通过序列化操作将其转化为字符串,消费端的处理进程从队列取出消息数据后,可以对其进行解析处理,完成业务逻辑的闭环。...消息数据 Laravel 队列系统的消息数据会以任务类形式提供,并且针对不同的驱动再做一层封装,从而方便底层进行统一处理,对于 Redis 驱动的队列系统,最终获取到的数据会通过 RedisJob 封装后返回...getNextJob 方法正是调用了前面 RedisQueue(这里配置的是 Redis 队列,其他驱动以此类推)的 pop 方法返回的通过 RedisJob 封装后的消息数据,然后调用 runJob...:队列系统和异步处理 Laravel 框架都已经提供了,在日常开发时,我们只需要按照消息任务类的结构编写 handle 处理方法,然后在适当的地方通过 dispatch 方法进行分发即可,剩下的交给 Laravel

6.3K30
  • CompletableFuture实现异步编排

    cancel():用于取消异步任务的执行。如果异步任务已经完成或者已经被取消,或者由于某些原因不能取消,则会返回false。如果任务还没有被执行,则会返回true并且异步任务不会被执行。...isDone():判断任务是否已经完成,如果完成返回true,否则返回false。需要注意的是:任务执行过程中发生异常、任务被取消也属于任务已完成,也会返回true。...不支持链式调用 对于Future的执行结果,想继续传到下一个Future处理使用,从而形成一个链式的pipline调用,这在 Future无法实现。...不支持多个 Future 合并 比如有10个Future并行执行,想在所有的Future运行完毕之后,执行某些函数,是无法通过Future实现的。...(此时boolean值返回true),则通过get()拿到的数据会是complete()设置的参数value值,如果此时异步执行已经完成(此时boolean值返回false),则通过get()拿到的就是执行完成的结果

    1.5K10

    同步、异步转化和任务执行

    异步的好处: 1、异步流程可以立即给调用返回初步的结果。 2、异步流程可以延迟给调用方最终的结果数据,在此期间可以做更多额外的工作,例如结果记录等等。...3、异步流程在执行的过程,可以释放占用的线程等资源,避免阻塞,等到结果产生再重新获取线程处理。 4、异步流程可以等多次调用的结果出来后,再统一返回一次结果集合,提高响应效率。...接下来,不妨说一些同步和异步互相转化的故事。...,可是实际运行的结果发现,原来浏览器运行 JavaScript,所谓的异步,只是对开发人员和用户的一个欺骗,世界只是看起来这个样子—— 实际上,在 JavaScript 的世界里,其实根本就是“ 单线程...),也就是说,如果想在一个执行逻辑,休息一会、等待一会,这样的实现都会变得很困难(Jscex 就是用来解决这样的问题的)。

    67610

    深入探讨 C# 和 .NET asyncawait 的历史、背后的设计决策和实现细节

    当准备好使用操作结果时,调用者将该IAsyncResult实例传递给End方法,该方法负责确保操作已完成(如果未完成,则通过阻塞同步等待它),然后返回操作的任何结果,包括传播可能发生的任何errors/...我们调用MoveNext方法,它进入方法,然后方法执行直到遇到yield return。此时,对MoveNext的调用需要返回true返回yield值。...如果返回true,我们将继续处理循环,类似于在APM模式CompletedSynchronously返回true时,调用Begin方法的调用者(而不是回调)负责继续执行。...Time方法只知道它调用了action(),委托调用返回了;它不知道异步方法实际上仍在“运行”,并且将在以后异步完成。...,如果将我的示例更改为: 仍然只涉及Task和Task,但实际上使用了四种不同的结构体等待类型,因为在ConfigureAwait返回的内容上调用GetAwaiter()返回等待者类型与

    89541

    结合 Bootstrap + Vue 组件实现 Laravel 异步分页功能

    posts, 'elements' => $pages ]); } 我们会在分页组件显示分页链接,所以调用 paginate 方法进行分页,每页显示 6 篇文章,然后调用 onEachSide...最后,我们将分页数据以 JSON 格式返回调用方进行处理。...然后我们在该控制器的文章首页列表方法 index 返回一个视图用于渲染文章列表: public function index() { return view('post.index'); }...测试异步分页组件 接下来,我们来测试下这个分页组件。在此之前,先运行 npm run dev 重现编译前端资源让分页组件生效。...Vue 组件数据: 如果调整为每页显示3篇文章,则可以测试下页码过多时的显示效果: 至此,我们的异步分页组件就编写完成了,你还可以将其复用到其他资源的异步分页功能

    7.4K20

    laravel实现支付宝支付功能

    商家在网页调用支付宝提供的网页支付接口调起支付宝客户端内的支付模块,商家网页会跳转到支付宝完成支付,支付完后跳回到商家网页内,最后展示支付结果。...配置完成后,可提交审核,开发者点击提交审核后,预计会有一个工作日的审核时间。应用上线成功后,状态变为以上线,该状态下的应用能够调用生产环境的接口。 三....配置config(alipay.php) 在上面alipay的demo是有一个config.php文件作为配置文件的,这里我们不需要这个文件,我们利用laravel的特性,在laravel项目目录下的...* @param $return_url 同步跳转地址,公网可访问 * @param $notify_url 异步通知地址,公网可以访问 * @return $response 支付宝返回的信息...POST形式调用,在调用支付接口的时候会出现CSRF错误,现在最简单的方法是利用laravel的中间件避免CSRF,在app/Http/Middleware/VerifyCsrfToken.php增加路由

    2.5K10

    Java 异步编程实战之基于 JDK 的 Future 实现异步编程|送书

    ;当调用取消任务后,在调用isDone()方法,后者会返回true,随后调用isCancelled()方法也会一直返回true;该方法会返回false,如果任务不能被取消,比如任务已经完成了,任务已经被取消了...等main函数运行doSomethingB完毕后,执行代码4同步等待doSomethingA任务完成然后代码5打印两个任务的执行结果。...submit方法提交了一个任务到线程池,然后返回一个FutureTask对象。...3.4 FutureTask的get()方法 等待异步计算任务完成,并返回结果;如果当前任务计算还没完成则会阻塞调用线程直到任务完成;如果在等待结果的过程中有其他线程取消了该任务,则调用线程会抛出CancellationException...; 当调用取消任务后,在调用isDone()方法,后者会返回true,随后调用isCancelled()方法也会一直返回true;该方法会返回false,如果任务不能被取消,比如任务已经完成了,任务已经被取消了

    1.7K10

    【云+社区年度征文】swoft2与laravel-swoole选型实践

    刚开始打算是在cygwin中使用laravel-s这个laravel扩展包,然而报出了一个cli_set_process_title() failed异常。...并发2000] 并发数3000: [swoft并发3000] [laravel-swoole并发3000] 并发数5000: [swoft并发5000] [laravel-swoole并发5000] 运行时数据库状况...laravel都支持同步与异步的事件驱动,在异步处理方面,swoft是基于swoft的协程,而laravel是基于队列。...附测试使用swoft遇到的一个有意思的问题: 开启协程有srun与sgo,两者有何不同? sgo:开启新协程。 srun:启动协程并等待执行结束。...middle end 从上面对比看出,顺序执行了(即已经做了同步),但是会抛出一个警告,已经是协程环境不要使用run方法,这可能就是框架作者反复强调再次强调,框架只能使用 sgo 函数创建协程。

    1.7K61

    JUC系列(十一) | Java 8 CompletableFuture 异步编程

    在JavaCompletableFuture用于异步编程,异步通常意味着非阻塞,可以使我们的任务单独运行在与主线程分离的其他线程,并且通过回调可以在主线程得到异步任务的执行状态,是否完成,和是否异常等信息...boolean isCancelled();//如果此任务在正常完成之前被取消,则返回true boolean isDone(); //如果此任务完成,则返回true 。...场景:主线程里面创建一个 CompletableFuture,然后主线程调用 get 方法会 阻塞,最后我们在一个子线程中使其终止。...; } } 3.3、场景二:没有返回值的异步任务 runAsync:返回一个新的 CompletableFuture,它在运行给定操作后由在ForkJoinPool.commonPool()运行的任务异步完成...*/ 3.6、场景五:thenAccept 消费处理结果 如果你不想从你的回调函数返回任何东西,仅仅想在Future完成运行一些代码片段,你可以使用thenAccept()和 thenRun()方法

    54310

    【译】JavaScript的asyncawait

    异步的JavaScript从未如何简单!过去段时间,我们使用回调。然后,我们使用promises。现在,我们有了异步功能函数。...异步函数能够使得(我们)编写异步JavaScript更加容易,但是,它自带一套陷阱,对初学者很不友好。 在这个由两部分组成的文章想分享下你需要了解的有关异步函数的内容。...一旦解析完promise,它就会返回参数传递给then调用。...复制代码 如果你想在一个异步函数处理错误,你需要调用try/catch。...我们知道异步函数总是返回一个promise。当我们调用promise时,我们可以在catch调用处理错误。这意味着我们可以通过添加.catch来处理异步函数的任何错误。

    88510

    swoft与laravel-swoole选型实践

    刚开始打算是在cygwin中使用laravel-s这个laravel扩展包,然而报出了一个cli_set_process_title() failed异常。...运行时数据库状况: ? ? 关键指标: Complete requests:请求完成数 Failed requests:请求失败数 Connection Times:网络消耗时间。...laravel都支持同步与异步的事件驱动,在异步处理方面,swoft是基于swoft的协程,而laravel是基于队列。...附测试使用swoft遇到的一个有意思的问题: 开启协程有srun与sgo,两者有何不同? sgo:开启新协程。 srun:启动协程并等待执行结束。...middle end 从上面对比看出,顺序执行了(即已经做了同步),但是会抛出一个警告,已经是协程环境不要使用run方法,这可能就是框架作者反复强调再次强调,框架只能使用 sgo 函数创建协程。

    3K10

    ConfigureAwait in .NET 8

    在某些情况下,有些代码需要先取消任务,然后等待现有任务完成后再启动替代任务。...具体来说,您可以调用 .GetAwaiter().GetResult() 来阻塞从 ConfigureAwait 返回的 awaiter。...Yield 返回一个特殊的 awaitable,它总是声称尚未完成,但会立即安排其继续。这意味着 await 始终以异步方式执行,让出给调用者,然后异步方法尽快继续执行。...就个人而言,发现强制异步行为在单元测试中最有用。在某些情况下,它还可以用来避免堆栈潜入。在实现异步协调基元(如我的 AsyncEx 库的原语)时,它也可能很有用。...在 C# ,您现在可以使用 ForceYielding 来等待一个完成的任务,await 的行为就好像它尚未完成一样,就像 JavaScript 的 await 一样。

    30410

    SpringBoot异步调用

    大家好,又见面了,是你们的朋友全栈君。 除了异步请求,一般上我们用的比较多的应该是异步调用。通常在开发过程,会遇到一个方法是和实际业务无关的,没有紧密性的。比如记录日志信息等业务。...这个时候正常就是启一个新线程去做一些业务处理,让主线程异步的执行其他业务。 何为异步调用异步调用前,我们说说它对应的同步调用。...通常开发过程,一般上我们都是同步调用,即:程序按定义的顺序依次执行的过程,每一行代码执行过程必须等待上一行代码执行完毕后才执行。而异步调用指:程序在执行时,无需等待执行的返回值可继续执行后面的代码。...这里采用了CallerRunsPolicy策略,当线程池没有处理能力的时候,该策略会直接在 execute 方法的调用线程运行被拒绝的任务;如果执行程序已关闭,则会丢弃该任务。...对于Future配置超时,很简单,通过get方法即可,具体如下: //get方法会一直堵塞,直到等待执行完成返回 //get(long timeout, TimeUnit unit) 在设置时间类未返回结果

    91530

    .NET简谈组件程序设计之(异步委托)

    想要异步调用必须用子线程去完成,让主线程能处理一些关键的事情,比如用户界面响应、按钮事件的处理。不能让用户等待这是原则。 下面我们就来学习关于异步委托的相关技术。...然后使用同步调用,也就是直接用委托实例调用。...如果当前实例收到信号返回true,否则false....上图代码通过WaitHandle.WaitOne方法进行4秒钟的等待,如果在指定的时间内未能收到信号那么该方法返回false,则继续等待,只有等到返回true才能说明异步操作结束。...由于事件是基于委托的所以我们当然可以通过事件进行异步调用订阅者的方法,但是不能像往常那样直接进行BeginInvoke,只有当委托列表仅仅有一个委托方法时才能直接BeginInvoke,如果多余一个必须进行循环调用

    47010

    netty的Future异步回调难理解?手写个带回调异步框架就懂了

    Future是java.util.concurrent.Future,是Java提供的接口,可以用来做异步执行的状态获取,它避免了异步任务在调用者那里阻塞等待,而是让调用者可以迅速得到一个Future对象...,想在等待它执行完毕,而是希望它执行完毕后主动给我一个回调即可。...据此,我们拆分出几个角色,master主线程,调度器(发起异步调用),worker(异步工作线程)。然后就是将他们组合起来,完成各种异步回调,以及每个worker的正常、异常、超时等的回调。...完成了这样的小demo,立马从netty的复杂恢复了过来,心情变成了这样: ?...还好,CompleteableFuture提供了allOf这个方法,它可以让你传入多个future,并且能够等待这多个future都完成时再统一返回。见下图代码。 ?

    3.8K21

    开源异步并行框架,完成任意的多线程编排、阻塞、等待、串并行结合、强弱依赖

    Future是java.util.concurrent.Future,是Java提供的接口,可以用来做异步执行的状态获取,它避免了异步任务在调用者那里阻塞等待,而是让调用者可以迅速得到一个Future对象...,想在等待它执行完毕,而是希望它执行完毕后主动给我一个回调即可。...据此,我们拆分出几个角色,master主线程,调度器(发起异步调用),worker(异步工作线程)。然后就是将他们组合起来,完成各种异步回调,以及每个worker的正常、异常、超时等的回调。...完成了这样的小demo,立马从netty的复杂恢复了过来 实现一个简单带回调、超时的异步任务 public class BootstrapNew { public static void...还好,CompleteableFuture提供了allOf这个方法,它可以让你传入多个future,并且能够等待这多个future都完成时再统一返回。见下图代码。

    1.8K10

    一篇文章理解Python异步编程的基本原理

    而第16、17、18行都是简单的赋值和 print 函数,运行时间加在一起都显然小于1秒钟,所以理论上我们看到的返回应该是: 能不能在第一个请求等待的过程运行到这里?...但实际上,我们看到的效果,却是:程序先运行到第15行,等待请求完成网站返回以后,再运行16,17,18行,然后运行19行,等2秒请求完成了,再运行第20行,最后运行第21行。...你不能像 JavaScrapt 那样手动直接控制在异步请求等待时执行什么代码。 在异步代码调用同步函数 在异步函数里面是可以调用同步函数的。...我们现在写一个基于递归的斐波那契数列第 n 项计算函数,并在另一个异步函数调用它: def sync_calc_fib(n): if n in [1, 2]: return 1...这段代码说明,当一个异步函数(calc_fib)调用一个耗时非常长的同步函数(sync_calc_fib)时,这一批所有的异步任务都会被卡住,只有这个同步函数运行完成以后,其他的异步函数才能被正常调度

    1.1K41

    异步编程 - 04 基于JDK的Future实现异步编程(上)_Future & FutureTask 源码解析

    ---- Future接口方法详解 Future类共有5个接口方法,下面我们来一一讲解 V get() 等待异步计算任务完成,并返回结果; 如果当前任务计算还没完成则会阻塞调用线程直到任务完成; 如果在等待结果的过程中有其他线程取消了该任务...,再调用isDone()方法,后者会返回true,随后调用isCancelled()方法也会一直返回true; 如果任务不能被取消,比如任务完成后已经被取消了,则该方法会返回false。...等main函数运行doSomethingB完毕后, 执行代码4同步等待doSomethingA任务完成然后代码5打印两个任务的执行结果。...---- FutureTask的get()方法 等待异步计算任务完成,并返回结果; 如果当前任务计算还没完成则会阻塞调用线程直到任务完成; 如果在等待结果的过程中有其他线程取消了该任务,则调用线程会抛出...当调用取消任务后,再调用isDone()方法,后者会返回true,随后调用isCancelled()方法也会一直返回true; 如果任务不能被取消,比如任务已经完成了,任务已经被取消了,则该方法会返回

    23140
    领券