Deferred

by Jose Montero

HTML

<table id="invoice-table">
    <tr>
      <td data-priority="1">Invoice #</td>
      <td data-priority="2">Due</td>
      <td data-priority="3">Amount</td>
    </tr>
    <tr>
      <td data-priority="1">MI13150416113956</td>
      <td data-priority="2">0.00</td>
      <td data-priority="3"><input type="number" name="invamt0" size="4"/></td>
    </tr>
    <tr>
      <td data-priority="1">MI13150416113960</td>
      <td data-priority="2">$70.00</td>
      <td data-priority="3" class="invamtcls"><input type="number" name="invamt1" size="4"/></td>
    </tr>
    <tr>
      <td data-priority="1">MI13150416113960</td>
      <td data-priority="2">$80.00</td>
      <td data-priority="3" class="invamtcls"><input type="number" name="invamt1" size="4"/></td>
    </tr>        
  	<tbody>
	</tbody>
	</table>

JavaScript

var func = (function(){
    
    return {
        invoices : [],
        init : function()
        {
            this.invoices.push({ 'paymentlineitemsid' : '123'});
            this.invoices.push({ 'paymentlineitemsid' : '456'});
            this.invoices.push({ 'paymentlineitemsid' : '789'});
            

            this.process();
        },
        process : function()
        {

            var deferArr = this.createDeferredArray();
            
            $.when.apply(this, deferArr)
			.then(function(){
					
                alert('All Done');
					
			}.bind(this));    
        },
		createDeferredArray : function()
		{
      
			var func = {};
			var deferredArr = $.map($("input[name^='invamt']"), function(obj, i) {
				
				var paymentLineItemId = this.invoices[i].paymentlineitemsid; 
				var invoicePayment = parseFloat(obj.value);
				
				func = function(paymentLineItemId, invoicePayment){  
                    this.updatePaymentLineItem(paymentLineItemId, invoicePayment) }.bind(this);

				    return func;
			    }.bind(this));
			
			return deferredArr;
		},
        updatePaymentLineItem : function(paymentLineItemId, invoicePayment)
        {
			var addItemdeferred = $.Deferred();
			
            setTimeout(function(addItemdeferred){
                addItemdeferred.resolve();
             },3000)

			return addItemdeferred.promise();            
        }
    };
 })();

func.init();