Giter Club home page Giter Club logo

Comments (4)

jsor avatar jsor commented on May 18, 2024

No, it is not the same. Chaining then() calls allows for transformation of the resolution value. See https://github.com/reactphp/promise/blob/master/README.md#resolution-forwarding.

$promise = $deferred->promise()
    ->then(function ($x) {
          // Here we get the initial resolution value: $x === 1;
          // Now add 1
          return $x + 1;
    })
    ->then(function ($x) {
          // Here we get the transformed value from the previous then() callback: $x === 2;
          // Now add 1 again
          return $x + 1;
    })
    ->then(function ($x) {
          // Here we get the transformed value from the previous then() callback: $x === 3;
          echo $x;
    });

$deferred->resolve(1);

from promise.

sm2017 avatar sm2017 commented on May 18, 2024

How exactly this code runs?

$promise = $deferred->promise();
$promise->then(function ($x) {
          // Here we get the initial resolution value: $x === 1;
          // Now add 1
          return $x + 1;
    });
$promise->then(function ($x) {
          // Here we get the transformed value from the previous then() callback: $x === 2;
          // Now add 1 again
          return $x + 1;
    });
$promise->then(function ($x) {
          // Here we get the transformed value from the previous then() callback: $x === 3;
          echo $x;
    });

$deferred->resolve(1);

How can I have a conditional then ?

Get a promise
Check redis , if found cached data , use it 
Else Fetch a row from database and then If(0<expireTime) then cache it to redis
then ...

from promise.

jsor avatar jsor commented on May 18, 2024

How exactly this code runs?

This code doesn't chain promises but creates 3 new independent promises. In this case $x === 1 in all 3 callbacks.

How can I have a conditional then ?

Get a promise
Check redis , if found cached data , use it 
Else Fetch a row from database and then If(0<expireTime) then cache it to redis
then ...

Something like this maybe:

function fetchFromDbAndStoreToRedis($key)
{
    return queryDb($key)
        ->then(function($row) use ($key) {
            $value = $row['value'];

            if ($row['expireTime'] <= 0) {
                return $value;
            }

            return storeToRedis($key, $value, $row['expireTime'])
                ->then(function() use ($value) {
                    return $value;
                });
        })
    ;
}

fetchFromRedis($key)
    ->then(function($value) use ($key) {
        if (null !== $value) {
            return $value;
        }

        return fetchFromDbAndStoreToRedis($key);
    })
;

from promise.

jsor avatar jsor commented on May 18, 2024

Closing for now, feel free to reopen if you have further questions.

from promise.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.