StartWorkflow from Query Instead of Item Selection

Jun 30, 2015 at 9:03 PM
I am trying to start a workflow from an "admin" page based on a query string that the user "build" from some form controls. I am able to get and loop through all of the list items from the query.
var queryString = "<Query><Where><Eq><FieldRef Name='FYQTR' /><Value Type='Text'>" + fyqtr + "</Value></Eq></Where></Query>";
    $().SPServices({
        operation: "GetListItems",
        async: false,
        listName: listId,
        CAMLViewFields: "<ViewFields><FieldRef Name='ID' /><FieldRef Name='EncodedAbsUrl' /></ViewFields>",
        CAMLQuery: queryString,
        completefunc: function (xData, Status) {
            $(xData.responseXML).SPFilterNode("z:row").each(function() {
                itemURL = $(this).attr("ows_EncodedAbsUrl");
                itemID = $(this).attr("ows_ID");
                StartWF(itemURL, itemID, "SetItemReadOnly");
            });
        }
    });
However, not all items passed to the StartWF function are successfully processed. Of the 700+ items, only the first 5-6 are processed successfully. Why are they not all processing successfully?
function StartWF(itmURL, itmID, wfName) {
    var workflowGUID = null;
    var workflowParams = "<root />";

    //Before start the workflow, we used GetTemplatesForItem to get Workflow Template Id.
    $().SPServices({
        operation: "GetTemplatesForItem",
        item: itmURL,
        async: true,
        completefunc: function (xData,Status) {
            $(xData.responseXML).find("WorkflowTemplates > WorkflowTemplate").each(function (i,e) {
                if ($(this).attr("Name") == wfName) {
                    var guid = $(this).find("WorkflowTemplateIdSet").attr("TemplateId");
                    if (guid != null) {
                        workflowGUID = "{" + guid + "}";
                                                
                        //Start the workflow
                        $().SPServices({
                            operation: "StartWorkflow",
                            item: itmURL,
                            templateId: workflowGUID,
                            workflowParameters: workflowParams,
                            async: true,
                            completefunc: function () {
                            }
                        });
                    }
                }
            });
        }
    });
}
Jun 30, 2015 at 10:36 PM
Edited Jul 1, 2015 at 2:00 PM
UPDATE:
I changed the async property to false in the GetTemplatesForItem and StartWorkflow operations and the workflows for all of the items in the query were processed successfully (700+).

Now, the question is, why is this not working asynchronously?