async & await

https://medium.com/@nemo1275/await%EA%B0%80-%EB%AD%90%EC%A3%A0-1332622df251
https://developers.google.com/web/fundamentals/primers/async-functions?hl=ko

promise와 밀접한 관련이 있는듯. async 키워드와 함께 function을 정의하고. await 키워드와 함께 Promise를 사용하면 됨.

const myPromise = new Promise((resolve, reject) => {
    resolve('jin');
});

async function main(){
    const name = await myPromise;
    console.log(name); // jin
}

main();
function getName(){
    Promise.resolve('jin');
}
function getAge(){
    Promise.resolve(21);
}
async function main(){
    const name = await getName();
    const age = await getAge();
    console.log(name); // jin
    console.log(age);  // 21
}
main();
function getName(){
    Promise.resolve('jin');
}
function getAge(){
    Promise.reject("an error has occured");
}
async function main(){
    try{
        const name = await getName();
        const age = await getAge();
        console.log(name); 
        console.log(age);  
    }catch(err){
        console.log(err); // an error has occured
    }
}
main();
function getName(){
    Promise.resolve('jin');
}
function getAge(){
    Promise.resolve(21);
}
async function main(){
    try{
        const [name, age] = await Promise.all([getName(), getAge()];
        console.log(name);  // jin
        console.log(age);   // 21
    }catch(err){
        console.log(err);
    }
}
main();

proxy

http://hacks.mozilla.or.kr/2016/03/es6-in-depth-proxies-and-reflect/

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy

proxy는 standard built-in object 중 하나 인듯.

handler, traps, target 이라는 용어가 있음.

traps 는 property에 접근하는 method들로.. get(), set(), construct() 등 13개정도 있는듯함.

var p = new Proxy(target, handler);

target과 handler는 object 이고..

var target = {};
var handler = {};
var p = new Proxy(target, handler);

p.a = 37; // set 

console.log(target.a); 

handler에 traps 들을 선택적으로 재정의 하는것으로 보임.

const target = {
  secret: 'easily scared',
  eyeCount: 4
};

const handler = {
  get: function(target, prop, receiver) {
    if (prop === 'secret') {
      return `${target.secret.substr(0, 4)} ... shhhh!`;
    } else {
      return Reflect.get(...arguments);
    }
  }
};

const p = new Proxy(target, handler);

console.log(p.eyeCount);
console.log(p.secret);