21

böyle aşağıdaki örnekte olduğu gibi basit bir geri arama kullanırken: Geri aramak için "bekleme" nasıl yapılır?

test() { 
    api.on('someEvent', function(response) { 
    return response; 
    }); 
} 

nasıl işlev zaman uyumsuz/bekliyoruz kullanmayı değiştirilebilir? Özellikle, 'someEvent' varsayarak kez çağrılacak garantili ve bu şekilde sadece bir kez, ben geri arama idam edilene kadar dönmez bir zaman uyumsuz işlevi olmasını fonksiyon testi istiyorum:

async test() { 
    return await api.on('someEvent'); 
} 
+0

Sadece referans için, ES7/ES2016 specificati üzerinde sonlandırılmış ve uyumsuz/beklemeyi içermiyor. Şu anda sadece bir [aşama 3 öneri] (https://github.com/tc39/ecma262#current-proposals). –

+0

Bu şaşırtıcı bir şey - Çok fazla ümit içerecek! [email protected] – sean2078

+1

için teşekkürler ES2015 ve ES6'nın aynı şey olması, karışıklık yaratabilir, ancak ES7'nin ES2016 ile değiştirilemeyeceğine dikkat edilmelidir. ES2016 başarılı bir gerçektir. ES7 WIP'dir. – estus

cevap

37

async/await değil büyü. Bir uyumsuzluk işlevi, sizin için Promises'i kaldırabilen bir işlevdir, bu nedenle çalışmak için bir Söz vermesi için api.on() gerekir. Böyle bir şey:

function apiOn(event) { 
    return new Promise(resolve => { 
    api.on(event, response => resolve(response)); 
    }); 
} 
Sonra

async function test() { 
    return await apiOn('someEvent'); // await is actually optional here 
             // you'd return a Promise either way. 
} 

Ama aslında test() değer elde gidiş değildir bu yüzden zaman uyumsuz işlevler de, sözler kendilerini dönmek çünkü bu çok yalan ancak bunun yerine, bir değer için söz verdiğiniz bir Söz,

async function whatever() { 
    // snip 
    const response = await test(); 
    // use response here 
    // snip 
} 
+1

Düzenlemeye çalışırken çok şansım olmadı, ancak 'test()' işlevinde bir hata var. Geri dönmelidir 'apiOn (' someEvent ') 'beklemek ve api.on (' someEvent ')' beklemek değil. 'Test()' işlevi, doğrudan çağrılmayan, yeni oluşturulan vaat sarıcısını "api.on" etrafında çağırmaktır. – kylethebaker

+0

Bu cevap günümü kurtardı! – karthikeayan

İlgili konular