'Çözüm' işlevi bir söz oluşturmak için kullanılan işlevde başvurulmuyorsa, söz verilişi tanımsızdır. Aşağıdaki kod, ... yılında söz yaratan fonksiyonun dışında kararlılığını yapmaya çalışıyorNeden 'yeni Promise (...)' tekrar 'tanımlanmamış'?
var count = 0;
var limit = 3;
//
var thePromise;
function timeout(_count) {
thePromise.resolve(_count);
}
function sendMessage() {
return new Promise(function(resolve, reject) {
if (++count > limit) {
reject({'Limit Exceeded': count});
}
else {
// With this line in place, the return value from this function
// (expected to be a promise) is undefined
setTimeout(timeout.bind(null, count), 1000);
// If the line above is replaced by this, it works as expected
// setTimeout(/*timeout.bind(null, count)*/function (_count) {
// resolve(_count);
// }.bind(null, count), 1000);
}
});
}
function sendAnother(_count) {
console.log('Resolved with count %j', _count);
return sendMessage();
}
function detectError(_error) {
console.log('Rejected with %s', JSON.stringify(_error));
process.exit(1);
}
thePromise = sendMessage();
thePromise = thePromise.then(function (_count) { return sendAnother(_count)}, function(_error) {detectError(_error)});
, sonuçları:
node-promises.js:6
thePromise.resolve(_count);
^
TypeError: undefined is not a function
at timeout (node-promises.js:6:16)
at Timer.listOnTimeout (timers.js:110:15)
Ama hat 16 ve çizgileri geçersiz kılınırsa 18- 20 uncommented, çıktı:
Resolved with count 1
.. beklediğim şey budur. Neyi kaçırıyorum? Bu, Windows 7'de nodejs v0.12.2 kullanıyor, eğer herhangi bir fark yaratıyorsa.
Teşekkürler Matt - önerilen değişikliğin beklendiği gibi çalışmasını sağlar. Yanlış gittiğim yerde, sözün içinde saklanmak için 'resol() işlevini beklemekteydi; ancak sadece 'o zaman()' araması sırasında tanımlandığı anlaşılmaktadır. –