تاریخ انتشار: دوشنبه, ۵ خرداد ۱۳۹۹، ۰۴:۳۵ ب.ظ نویسنده: محمدیان

 مثالی ساده از کال بک فانکشن

میخواهم تابعی ایجاد کنم که نتیجه ضرب 2 عدد را به من بدهد و سپس بتوانم با این نتیجه تابع دیگری را اجرا کنم. بنابراین:

function calc(val1,val2,cb){
    let result = val1*val2;
    return cb(result)
}

calc(5,6,function(result){
    console.log(result)
})

مثالی ساده از پرامیس Promise

const random = ()=>{
    return Promise.resolve(Math.random());
}

random().then(val=>{
    return val+5;
}).then(val=>{
    return Math.round(val)
}).then(val=>{
    console.log(val)
})
const showNum = Promise.resolve('56');

showNum.then(val=>console.log(val))
function calc(val1,val2){
    return val1*val2;
}

let exe = (val1,val2)=>{
    let p = new Promise((res:any,rej:any)=>{
        const result = calc(val1,val2);
        if(result){
            res(result)
        }else{
            rej('Problem on execut.')
        }
    })

    return p;
}

exe(5,6).then(res=>{
    console.log(res)
})

وقتی داده ها آماده نیستند و مقداری زمان برای آماده سازی آن ها نیاز است. یک پرامیس بازگشت میدهیم، پرامیس نیز قول میدهد که هرگاه داده مورد نظر ما آماده بود، اطلاع دهد.

مثالی ساده از async, await

const calc = (val:number)=>{
    return new Promise((res,rej)=>{
        res(val*5);
    })
}

const loger = async(num:number)=>{
    const result = await calc(num);
    console.log(result)
}

loger(2)

یکی از مزایای async و await اینه که await هر داده ای که به دستش برسه رو تحویل میده، اگه پرامیس باشه صبر میکنه که پرامیس وضعیتش تغییر کنه و کارش رو انجام بده و اگر هم پرامیس نباشه که داده رو همون موقع به صورت async تحویل میده. به نظر من دیگه از این بهتر نمیشه. انگار که نه انگار داری به صورت async با داده ها کار میکنی. واقعاً فوق العاده اس.

مثال فوق بدون پرامیس :

const calc = (val)=>{
    return val*5;
}

const loger = async(num)=>{
    const result = await calc(num);
    console.log(result)
}

loger(5)

توجه داشته باشید که هنوز هم میتوان به صورت زنجیره then به داده دسترسی داشت. به شرط اینکه درون تابع async نهایتاً از return استفاده کنیم. و داده را برگشت دهیم.

 

مثالی دیگر از Promise:

function getUser(id){
    return new Promise((res,rej)=>{
        res('database is ready---> user is: '+id)
    })
}
setTimeout(()=>{
    getUser(150).then(user=>{
        console.log(user);
    })
},2000)

 

تاریخ انتشار: جمعه, ۲ خرداد ۱۳۹۹، ۰۶:۳۱ ق.ظ نویسنده: محمدیان

استفاده از کلاس ها برای ایجاد اشیا

مجوزهای دسترسی به خواص و متودهای کلاس:

public : پیشفرض - هم در خود کلاس و هم در خارج کلاس قابل دسترسی و استفاده است.

protected : فقط درون کلاس جاری(خود کلاس) و فرزندان کلاس قابل دسترسی است. یعنی در کلاس های فرزند نیز میتوان با کلمه کلیدی this به خواص و متودهای protected دسترسی داشت.

private : فقط و فقط در خود کلاس قابل استفاده است و حتی فرزندان کلاس نمیتوانند به خواص و متودهای private دسترسی داشته باشند.

 

مثال کلاس :

class Person {
    name:string; // default is public accesor
    private type:string;
    protected age:number;

    constructor(name:string,public userName:string){
        this.name = name;
    }
}

const person = new Person("Mokhtar","Mohammadiyan");
console.log(person)
console.log(person.name)

نکنه مهم : پارامترهایی که در constructer تعریف میشوند هم خواص کلاس هستند که به صورت ورودی دریافت میشوند.

متودهای درون کلاس و دسترسی به یکدیگر

class Person {
    name:string; // default is public accesor
    private type:string;
    protected age:number;

    constructor(name:string,public userName:string){
        this.name = name;
        this.age = 34;
    }

    printAge():void{
        this.setType("Old Guy");
        console.log(this.age);
    }

    setType(type:string):void{
        this.type = type;
        console.log(this.type);
    }
}

const person = new Person("Mokhtar","Mohammadiyan");
person.printAge();
person.setType("Old");

اگر متود setType را به صورت private تعریف کرده بودیم، فقط در داخل کلاس قابل استفاده بود و در مثال فوق ما پیغام خطای کامپایلر مواجه میشدیم.