টাইপস্ক্রিপ্ট ঘুম


136

আমি কৌনিক 2 তে টাইপস্ক্রিপ্ট ব্যবহার করে একটি ওয়েবসাইট বিকাশ করছি এবং আমি ভাবছিলাম যে thread.sleep(ms)কার্যকারিতা বাস্তবায়নের কোনও উপায় আছে কিনা ।

আমার ব্যবহারের ক্ষেত্রে কিছু সেকেন্ড পরে ফর্ম জমা দেওয়ার পরে ব্যবহারকারীদের পুনর্নির্দেশ করা যা এইচটিএমএল বা জাভাস্ক্রিপ্টে খুব সহজ তবে আমি টাইপসক্রিপ্টে এটি কীভাবে করব তা নিশ্চিত নই।

অনেক ধন্যবাদ,


8
টাইপস্ক্রিপ্ট জাভাস্ক্রিপ্টের একটি সুপারসেট et সুতরাং এটি জাভাস্ক্রিপ্টে লিখুন, এবং আপনি সেখানে যান: আপনার একটি টাইপস্ক্রিপ্ট সমাধান রয়েছে।
জেবি নিজত

উত্তর:


203

আপনাকে ES5 সমর্থন সহ async/ টাইপস্ক্রিপ্ট 2.0 এর জন্য অপেক্ষা করতে হবে awaitকারণ এটি কেবলমাত্র টিএস থেকে ES6 সংকলনের জন্য সমর্থিত।

আপনি এর সাথে বিলম্বের ক্রিয়াটি তৈরি করতে সক্ষম হবেন async:

function delay(ms: number) {
    return new Promise( resolve => setTimeout(resolve, ms) );
}

এবং এটি কল

await delay(300);

দয়া করে মনে রাখবেন, আপনি awaitকেবল অভ্যন্তরীণ asyncফাংশন ব্যবহার করতে পারেন ।

যদি আপনি না করতে পারেন ( আসুন ধরা যাক আপনি নোডেজ অ্যাপ্লিকেশন তৈরি করছেন ), কেবল আপনার কোডটি বেনামে asyncফাংশনে রাখুন। এখানে একটি উদাহরণ:

    (async () => { 
        // Do something before delay
        console.log('before delay')

        await delay(1000);

        // Do something after
        console.log('after delay')
    })();

উদাহরণ টিএস অ্যাপ্লিকেশন: https://github.com/v-andrew/ts-template

ওল্ড জেএসে আপনাকে ব্যবহার করতে হবে

setTimeout(YourFunctionName, Milliseconds);

অথবা

setTimeout( () => { /*Your Code*/ }, Milliseconds );

তবে প্রতিটি বড় ব্রাউজার সমর্থন করে async/ awaitএটি অপ্রচলিত।

আপডেট: টাইপস্ক্রিপ্ট ২.১ এখানে রয়েছে async/await

কেবল এটি ভুলে যাবেন না যে আপনি PromiseES5 তে সংকলন করার সময় আপনার বাস্তবায়ন প্রয়োজন , যেখানে প্রতিশ্রুতি স্থানীয়ভাবে পাওয়া যায় না।


1
আপডেট : অ্যাসিঙ্ক / অপেক্ষার এবং ইএস 5 / ইএস 3 এর জন্য জেনারেটর সমর্থনগুলি টাইপস্ক্রিপ্ট 2.1 এ স্থানান্তরিত করা হয়েছে
ভি-অ্যান্ড্রু

8
ইভেন্টটি অপেক্ষা না করে, আপনি বিলম্ব করতে পারেন (20000) then (())>> {
জেডজেডজেড

1
কোনও কারণে এটি আমার পক্ষে কাজ করে না await new Promise(resolve => setTimeout(resolve, 1000)).then(()=>console.log("fired"));তবে এটি কাজ করেছেawait new Promise(resolve => setTimeout(()=>resolve(), 1000)).then(()=>console.log("fired"));
fjch1997

@ fjch1997, এটি asyncফাংশন মোড়ানো । আমি উদাহরণ জুড়েছি
ভি-অ্যান্ড্রু

2
'বিলম্ব' ফাংশন ঘোষণার জন্য অ্যাসিঙ্ক কীওয়ার্ডের দরকার নেই, কারণ এটি ইতিমধ্যে একটি প্রতিশ্রুতি দেয়।
স্লাভাস্ট

91

এটি কাজ করে: (মন্তব্যে ধন্যবাদ)

setTimeout(() => 
{
    this.router.navigate(['/']);
},
5000);

1
আমার ধারণা, সরলতার জন্য এই উত্তরটি এখনই গ্রহণযোগ্য উত্তর হওয়া উচিত।
ডিসপ্লে

1
পছন্দ করুন আমি অন্য উত্তরটি গ্রহণ করেছিলাম কারণ এতে এই উত্তর অন্তর্ভুক্ত ছিল এবং বিলম্ব করার অন্যান্য আরও "টাইপস্ক্রিপি" রয়েছে যা অন্যের পক্ষে আগ্রহী হতে পারে। আমি ব্যক্তিগতভাবে আমার কোড জুড়ে এটি ব্যবহার করছি যেহেতু আমি সুনির্দিষ্ট ব্যবহারের / এই নির্দিষ্ট কাজের জন্য অপেক্ষা করার কোনও লাভ দেখছি না তবে আমি টিএস পিউরিস্ট নই এবং যা সহজ / আরও পাঠযোগ্য, তার সাথে আমি চলেছি তাই আমি আপনার সাথে একমত নীতিগতভাবে :).
খাহ

31

কিছু কারণে উপরোক্ত স্বীকৃত উত্তরটি কৌণিক (V6) এর নতুন সংস্করণে কাজ করে না।

এটি ব্যবহারের জন্য ..

async delay(ms: number) {
    await new Promise(resolve => setTimeout(()=>resolve(), ms)).then(()=>console.log("fired"));
}

উপরে আমার জন্য কাজ।

ব্যবহার:

this.delay(3000);

বা আরও সঠিক উপায়

this.delay(3000).then(any=>{
     //your task after delay.
});

এমএস প্যারামিটার কল দিয়ে কেবল আপনার '1000' প্রতিস্থাপন করুন এবং এটি নিখুঁত হবে।
গ্রিনস্কিন

15

সহ RxJS:

import { timer } from 'rxjs';

// ...

timer(your_delay_in_ms).subscribe(x => { your_action_code_here })

x 0 হয়।

আপনি যদি দ্বিতীয় যুক্তি periodদেন তবে timerপ্রতিটি periodমিলিসেকেন্ডে একটি নতুন সংখ্যা নির্গত হবে (x = 0 তারপরে x = 1, x = 2, ...)।

দেখুন কর্মকর্তা ডক আরো বিস্তারিত জানার জন্য।


3
এই দৃষ্টিকোণটির জন্য ধন্যবাদ, "পর্যবেক্ষণযোগ্য উপায়"
ব্যবহারকারী 230910

0

আপনি যদি কৌনিক 5 এবং এর বেশি ব্যবহার করে থাকেন তবে দয়া করে আপনার টিএস ফাইলে নীচের পদ্ধতিটি অন্তর্ভুক্ত করুন।

async delay(ms: number) {
    await new Promise(resolve => setTimeout(()=>resolve(), ms)).then(()=>console.log("fired"));
}

তারপরে আপনি যেখানেই চান এই বিলম্ব () পদ্ধতিটি কল করুন।

উদাহরণ:

validateInputValues() {
    if (null == this.id|| this.id== "") {
        this.messageService.add(
            {severity: 'error', summary: 'ID is Required.'});
        this.delay(3000).then(any => {
            this.messageService.clear();
        });
    }
}

এটি 3 সেকেন্ডের পরে মেসেজ গ্রল হয়ে যাবে।



আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.