https://stackoverflow.com/questions/47019196/prevent-upload-until-after-processing-has-finished-function-with-callback
by jlspake
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/linq.js/2.2.0.2/linq.min.js"></script>
<button type="button" data-bind="click: uploadClicked">Upload</button>
<div data-bind="foreach: window.myEvents">
<span data-bind="text: $data"></span>
<br/> <br/>
</div>
JavaScript
window.myEvents = ko.observableArray([]);
function viewModel(){
var me = this;
me.uploadClicked = function () {
//playClicked();
window.myEvents.push("Retrieving data...");
GetTodaysDeliveries(function (results) {
window.myEvents.push("Processing delivery data...");
window.myEvents.push(JSON.stringify(results));
var deliveries = Enumerable.From(results).Select(function (r) {
r.transactionDate = r.transactionDate.format("YYYY-MM-DD HH:mm:ss");
return r;
}).ToArray();
//setTimeout(function () {
window.myEvents.push("Uploading delivery data...");
window.myEvents.push(JSON.stringify(deliveries));
//...upload stuff
//}, 20000);
});
}
}
function GetTodaysDeliveries (callback) {
GetDeliveries(function (results) {
window.myEvents.push(JSON.stringify(results));
$.each(results, function (index, result) {
result.transactionDate = moment(result.transactionDate).utc();
});
var todaysResults = Enumerable.From(results).Where(function (r) {
return moment().isSame(r.transactionDate, 'day');
}).ToArray();
console.log(results);
console.log(todaysResults);
return callback(todaysResults);
});
}
function GetDeliveries (callback) {
var me = this;
//timeout to simulate async db call
setTimeout(
function (context) {
//context.executeSql("SELECT barcode, titleName, delivered, expected, isNews, supplier, supplierId, transactionDate FROM delivery ORDER BY titlename", [], function (context, result) {
return callback([
{id: 1, transactionDate: new Date('10/30/2017')},
{id: 2, transactionDate: new Date('2/1/2017')},
{id: 3, transactionDate: new Date('10/30/2017')}
]);
}, 1000);//, me.ErrorHandler);
}
ko.applyBindings(new viewModel());