bir nechta funktsiyalar orasidagi javascriptni qayta tiklash

function A(){
   b()
   c()
}

V funktsiyasi b funktsiyasidan keyin chaqirilishi kerak. JavaScript-ni qayta chaqirish degan tushunchani bilaman.

Buni b funktsiyasida qanday bajarishim mumkin?

function b(cb){
//I can't put function c here, because this of c is bound to somewhere and I don't want to mess up.
}
0

10 javoblar

c() will always be called after b() because you placed it there.

Haqiqiy savol b() tugagandan oldin c() bo'lmish yoki yo'qligini bildiradi.

Agar b() async funktsiyasi bo'lsa, u holda sizning kodingiz juda yaxshi. b() tugagandan so'ng, c() deyiladi.

function A(){
    b();//*not* async
    c();
}

Biroq, agar b() mos kelmasa, c() ni qayta qo'ng'iroq qilishingiz kerak.     funktsiyasi A() {         b (s);//async     }

function b(cb){
   //...
    cb();//cb() doesn't need "this"
}

c() bog'liq uslub bo'lib, b() tarkibiga ( this ) ham o'tishi kerak.

function A(){
    /* extract and save context, somehow */
    b(c, context);//async
}

function b(cb, context){
   //...
    cb.call(context);//cb() doesn't need "this"
}

Men aralashmaslikni xohlamayman.

Kontekstdan o'tishni istamasangiz, Promise .

function A(){
    b().then(function() {
       //run "c()" only when "b()" is finished and there were no errors
        c();
    });
}

function b(){
   //...
   //"b()" is *not* async
    return Promise.resolve();
}

function b(){
   //...
   //"b()" is async
    var whenDone = new Promise(function(resolve, reject) {
        performAsyncTask(resolve);
    })
    return whenDone;
}

Lekin kuting, ko'proq narsa bor.

If you want bleeding edge tech, you can always use async/await

async function A(){
    await b();//VOILA! it's that easy
    c();
}

Bu umumiy asosiy strategiyalar. Albatta siz ularni moslashtira olishingiz yoki o'zingizning ehtiyojlaringizga mos yangi narsalarni aniqlashga harakat qilishingiz mumkin.

1
qo'shib qo'ydi
woah async vazifasi oqlangan.
qo'shib qo'ydi muallif Giala Jefferson, manba

c() will always be called after b() because you placed it there.

Haqiqiy savol b() tugagandan oldin c() bo'lmish yoki yo'qligini bildiradi.

Agar b() async funktsiyasi bo'lsa, u holda sizning kodingiz juda yaxshi. b() tugagandan so'ng, c() deyiladi.

function A(){
    b();//*not* async
    c();
}

Biroq, agar b() mos kelmasa, c() ni qayta qo'ng'iroq qilishingiz kerak.     funktsiyasi A() {         b (s);//async     }

function b(cb){
   //...
    cb();//cb() doesn't need "this"
}

c() bog'liq uslub bo'lib, b() tarkibiga ( this ) ham o'tishi kerak.

function A(){
    /* extract and save context, somehow */
    b(c, context);//async
}

function b(cb, context){
   //...
    cb.call(context);//cb() doesn't need "this"
}

Men aralashmaslikni xohlamayman.

Kontekstdan o'tishni istamasangiz, Promise .

function A(){
    b().then(function() {
       //run "c()" only when "b()" is finished and there were no errors
        c();
    });
}

function b(){
   //...
   //"b()" is *not* async
    return Promise.resolve();
}

function b(){
   //...
   //"b()" is async
    var whenDone = new Promise(function(resolve, reject) {
        performAsyncTask(resolve);
    })
    return whenDone;
}

Lekin kuting, ko'proq narsa bor.

If you want bleeding edge tech, you can always use async/await

async function A(){
    await b();//VOILA! it's that easy
    c();
}

Bu umumiy asosiy strategiyalar. Albatta siz ularni moslashtira olishingiz yoki o'zingizning ehtiyojlaringizga mos yangi narsalarni aniqlashga harakat qilishingiz mumkin.

1
qo'shib qo'ydi
woah async vazifasi oqlangan.
qo'shib qo'ydi muallif Giala Jefferson, manba

Ogohlantirishlar yoki qayta qo'ng'iroqni ishlatishingiz mumkin.

In this case I'd use a callback (as it's a simple use case & promises require crossbrowser checks).

function A() {
    b(c);//Pass the function 'c'
}

function c() {
   //Do something else
}

function b(callback) {
   //Do something

   //Run callback
    callback();//This will run whatever method you passed in
}
1
qo'shib qo'ydi

Sizning savolingiz aniq emas, uni tushunishga harakat qilaylik.

Agar ijro etsangiz

function A() { b(); c() }
function b() { /* b work */ }
function c() { /* c work */}

So'ng c kodi b agar sinxronlash bo'lsa deb nomlanadi.

B asynchronous bo'lsa, b tugagandan oldin c deyiladi. Keyinchalik, b parametri sifatida qayta qo'ng'iroq qilishingiz kerak:

function A() { b(c) }
function b(callback) { /* b work */ ; callback() }
function c() { /* c work */ }

Biroq, zamonaviy jslarda, sizga ko'proq va'da berishni xohlaysiz:

function A() {
  b().then( function() {
    c()
  } )
}
function b() {
  return new Promise( function(resolve, reject) {
    /* b work */
  } )
}
function c() { /* c work */ }
0
qo'shib qo'ydi

Sizning savolingiz aniq emas, uni tushunishga harakat qilaylik.

Agar ijro etsangiz

function A() { b(); c() }
function b() { /* b work */ }
function c() { /* c work */}

So'ng c kodi b agar sinxronlash bo'lsa deb nomlanadi.

B asynchronous bo'lsa, b tugagandan oldin c deyiladi. Keyinchalik, b parametri sifatida qayta qo'ng'iroq qilishingiz kerak:

function A() { b(c) }
function b(callback) { /* b work */ ; callback() }
function c() { /* c work */ }

Biroq, zamonaviy jslarda, sizga ko'proq va'da berishni xohlaysiz:

function A() {
  b().then( function() {
    c()
  } )
}
function b() {
  return new Promise( function(resolve, reject) {
    /* b work */
  } )
}
function c() { /* c work */ }
0
qo'shib qo'ydi

Sizning tushunishingiz to'g'ri. Qayta qo'ng'iroq tushunchasi funktsiya tugallanganda. Siz nima qilmoqchi bo'lsangiz, kirish turini ta'minlash va uning funktsional va boshqa narsa emasligiga ishonch hosil qilish. Quyidagi misolni ko'rib chiqing:

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

function A()
{
    alert('I am A function');
    b(c);
}

function b(cb)
{
    alert('I am "b" function');
    
    
    /// At the very end, put this code:    
    if (typeof(cb)==='function')
    {
         cb();
    }
}

function c()
{
    alert('I am "c" function');
}



A();
</div> </div>
0
qo'shib qo'ydi
function b(c){
    doSomething();
    c();
}

function a(){
    b(c);
}
0
qo'shib qo'ydi
Misolni tushuntirib ko'ring
qo'shib qo'ydi muallif Siddharth Thevaril, manba
function b(c){
    doSomething();
    c();
}

function a(){
    b(c);
}
0
qo'shib qo'ydi
Misolni tushuntirib ko'ring
qo'shib qo'ydi muallif Siddharth Thevaril, manba

JavaScript-dagi qo`ng'iroqlar boshqa funktsiyalar uchun argument sifatida qabul qilingan funktsiyalardir. Bu asinxron dasturlashning juda muhim xususiyati bo'lib, kodning bajarilishini davom ettirishimizga imkon beradigan uzoq vazifani bajarish vaqtida kodimizni chaqirish uchun qayta qo'ng'iroqni qabul qiluvchi funktsiyaga imkon beradi.

var callback = function() {
    console.log("Done!");
}

setTimeout(callback, 5000);

Ko'rib turganingizdek, setTimeout funksiyani parametr sifatida oladi, bu qayta qo'ng'iroqdir!

Sizda quyidagilarni amalga oshirishingiz mumkin:

function b(c) {
    c();
}

// calling function b and sending as a parameter an anonymous function
// that will be replaced by the "c" parameter in the "b" function
b(function() {
    console.log("inside c");
});

Bu deyarli yopish, faqat bir oz ko'proq tweaking va siz uni biriga o'zgartirishi mumkin.

0
qo'shib qo'ydi

JavaScript-dagi qo`ng'iroqlar boshqa funktsiyalar uchun argument sifatida qabul qilingan funktsiyalardir. Bu asinxron dasturlashning juda muhim xususiyati bo'lib, kodning bajarilishini davom ettirishimizga imkon beradigan uzoq vazifani bajarish vaqtida kodimizni chaqirish uchun qayta qo'ng'iroqni qabul qiluvchi funktsiyaga imkon beradi.

var callback = function() {
    console.log("Done!");
}

setTimeout(callback, 5000);

Ko'rib turganingizdek, setTimeout funksiyani parametr sifatida oladi, bu qayta qo'ng'iroqdir!

Sizda quyidagilarni amalga oshirishingiz mumkin:

function b(c) {
    c();
}

// calling function b and sending as a parameter an anonymous function
// that will be replaced by the "c" parameter in the "b" function
b(function() {
    console.log("inside c");
});

Bu deyarli yopish, faqat bir oz ko'proq tweaking va siz uni biriga o'zgartirishi mumkin.

0
qo'shib qo'ydi
Javascript UZB
Javascript UZB
99 ishtirokchilar

@js_uzb @vuejs_uz @react_uz @nodejs_uz @angular_uz @ngTashkent @yiiframework_uz @laravel_uz @linux_uzbek @python_uz @swift_uzb —————— @uzdevgroup @UzGeeksGroup ——— @UzDev_Jobs @jobs_uzb