fetchingProperty para Knockout.js

/**
* A Knockout Subscribable that is dependent on

* an asynchronous function for fetching it's value,

* such as a database call with a callback.

*

*
@param {Function} fetcher The function that does the fetching of
* the property value. The fetcher should accept

* one argument, a setter, which is simply a function

* that accepts the fetched value as it's single argument.

*
@param {Object} initialValue The initial value for the property (before the first fetch
* has completed.)

* @return {Subscribable} A Knockout Subscribable.

*/

function fetchingProperty(fetcher, initialValue) {
var cache = ko.observable(initialValue);

var subComputed = computedLazy({
deferEvaluation
: true,
read
: function() {
fetcher
(cache);
}
});

var firstRun = true;

return computedLazy(function() {
if (firstRun) {
firstRun
= false;
subComputed
();
}
return cache();
})

}