Node/Javascript'i öğrenmeye başladım, başlangıçtaki sözleri kullanarak ('un sözünü kullanmadığını ve çoğu zaman başkalarının yanlarında olmadan nasıl davranacağını merak ediyorum). Superagent'ın nasıl bir söz verdiğini döndürme
yüzden bazenfs
içeren bir dosyayı okuma gibi basit şeyler "promisify" gerekir:
var readFile = function(path) {
return new Promise(function(fulfill, reject) {
fs.readFile(path, function(err, data) {
if (err) { reject(err); }
else { fulfill(data); }
});
});
};
Ve bu harika çalışıyor. Şimdi superagent
ile aynı şeyi yapmam gerekiyor, ancak kullandığı zincirleme stili bana yapıştı.
var request = require('superagent');
request.get(...).set(...).set(...).end(callback); // stuck!
Ben end()
yöntemi değiştirmek ister (veya göz ardı ve yeni bir yöntem ekleyin) bir söz verir biriyle ederim. Böyle bir şey ...
var endQ = function() {
return new Promise(function(fulfill, reject) {
this.end(function(err, res) { // "this" is the problem!
if (err) { reject(err); }
else { fulfill(res); }
});
});
};
// then I could say this:
request.get(...).set(...).set(...).endQ().then(function(res) {
// happiness
}).catch(function(err) {
// sad about the error, but so happy about the promise!
});
This question here nesnelere yöntemleri ekleyerek hakkında tavsiyeler her türlü vardır, ancak kesin bir şey olduğunu görmek zor. Özellikle this answer tarafından endişelendim. Tavsiyelerin çoğu, nesnenin "sınıfı" ile başlayan ve işlevi .prototype
'a ekleyerek etrafında olur. Bunun gibi bir şey ....
// this part doesn't make sense
var requestInstance = new Request(); // no such thing in request as far as I know
requestInstance.prototype.endQ = endQ; // would be great, but no
Sorunumu görüyor musunuz? "Sınıf" isteğini "sınıflandırma" ve bir yöntem ekleme JS eşdeğerini istiyorum, ancak bir modülü olduğundan, istek sınıfını daha fazla veya daha az opak olarak ele almam gerekiyor. Tüm superagent already supports promises ait
https://www.npmjs.com/package/superagent-as:
İştesuperagent kendisi yaptığı iştir:
İkincisi, ne yapmak istiyorum oldukça basittir -Daniel_L, –
teşekkürler, bunu kontrol edecek. Sadece yaslanmış bir aşk uğruna, şu soruyu denediğimi mi yapıyorum? – user1272965
http://stackoverflow.com/questions/29595449/how-promisifyall-works-or-what-are-the-requirements-for-it-work –