http://proinlab.com/archives/2086


Promise.values = [];
Promise.id = 0;
Promise.exec = (promise)=> {
    let thisId = Promise.id;
    if(promise) {
        promise.then((data)=> {
            Promise.values[thisId] = data;
            resolve(data);
        });
        Promise.id++;
        return promise;
    }
    Promise.id = 0;
    return new Promise((resolve)=> resolve());
}

let A = (arg1, arg2)=> new Promise((resolve)=> {
    console.log('A Executed');
    setTimeout(()=> {
        resolve({result: arg1 + arg2});
    }, 500);
});

let B = (arg1, arg2)=> new Promise((resolve)=> {
    console.log('B Executed');
    setTimeout(()=> {
        resolve({result: arg1 - arg2});
    }, 500);
});

let C = (arg1, arg2)=> new Promise((resolve)=> {
    console.log('C Executed');
    setTimeout(()=> {
        resolve({result: arg1 * arg2});
    }, 500);
});

Promise.exec()
    .then(()=> Promise.exec(A(1, 2)))
    .then((data)=> Promise.exec(B(data.result, 4)))
    .then((data)=> Promise.exec(C(Promise.values[0].result, Promise.values[1].result)))
    .then((data)=> {
        // Promise A result
        console.log('A', Promise.values[0]);
        // Promise B result
        console.log('B', Promise.values[1]);
    // Promise C result
        console.log('C', data); // or console.log(value[2]);
    });


블로그 이미지

칩사마코더

,