HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux wordpress-ubuntu-s-2vcpu-4gb-fra1-01 5.4.0-169-generic #187-Ubuntu SMP Thu Nov 23 14:52:28 UTC 2023 x86_64
User: root (0)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/delta/wp-content/plugins/better-wp-security/core/packages/hocs/src/use-async.js
/**
 * WordPress dependencies
 */
import { useState, useEffect, useCallback } from '@wordpress/element';

/**
 * A hook to manage making an async request.
 *
 * @typedef {('idle'|'pending'|'success'|'error')} Status
 *
 * @param {Function} asyncFunction The async function to execute.
 * @param {boolean}  immediate     Whether to immediate execute the async function.
 * @return {{error: Error, execute: Function, value: *, status: Status}} Hook info.
 */
export default function useAsync( asyncFunction, immediate = true ) {
	const [ status, setStatus ] = useState( 'idle' );
	const [ value, setValue ] = useState( null );
	const [ error, setError ] = useState( null );

	const execute = useCallback(
		( ...args ) => {
			setStatus( 'pending' );
			setError( null );

			return asyncFunction( ...args )
				.then( ( response ) => {
					setValue( response );

					setStatus( 'success' );
				} )
				.catch( ( _error ) => {
					setError( _error );
					setValue( null );

					setStatus( 'error' );
				} );
		},
		[ asyncFunction ]
	);

	useEffect( () => {
		if ( immediate ) {
			execute();
		}
	}, [ execute, immediate ] );

	return { execute, status, value, error };
}