簡體   English   中英

.then鏈接不起作用。 為什么?

[英].then chaining doesn't work. Why?

我想從后端使用AJAX加載數據。 有4個AJAX請求(我不想使用jQuery)。 如果所有請求都完成了,我將處理接收/加載的數據。

異步偽代碼:

  1. 加載customerTable
  2. 加載項目表
  3. 加載offerTable
  4. 負載相位表
  5. 現在對數據做一些事情...

我正在學習並嘗試通過.then()鏈接實現諾言。

如果完成了AJAX調用,則函數getMySqlTable()返回一個promise:

    function getMySqlTable(theCase){
    return new Promise(function (resolve,reject){
        let data = {header:{case:theCase}};

        //AJAX request
        let ajGetProjectsAsOptions = new AjaxJsonRequest('php/ajax/customerDesk.php',data,function(xmlhttp){
            let response = JSON.parse(xmlhttp.responseText);
            if(response.status){
                switch(theCase){
                    case 'getCustomerTable':
                        customerTable = response.data.customers;
                        resolve(true);
                        break;
                    case 'getProjectTable':
                        projectTable = response.data.projects;
                        resolve(true);
                        break;
                    case 'getOfferTable':
                        offerTable = response.data.offers;
                        resolve(true);
                        break;
                    case 'getPhaseTable':
                        phaseTable = response.data.phases;
                        resolve(true);
                        break;
                }
            }else{
                printMessages(response.message);
                reject(false);
            }
        });
        ajGetProjectsAsOptions.doRequest();
    });
}

以下代碼可以正常工作並滿足我的要求:

    getMySqlTable('getCustomerTable')
    .then(()=>getMySqlTable('getProjectTable'))
    .then(()=>getMySqlTable('getOfferTable'))
    .then(()=>getMySqlTable('getPhaseTable'))
    .then(
        function(){
                console.log(customerTable);
                console.log(projectTable);
                console.log(offerTable);
                console.log(phaseTable);
            }
        )

但是,如果我想通過添加方括號來做更多的事情,那是行不通的。 如果添加一些方括號,則所有.then都將立即執行。 為什么?

  getMySqlTable('getCustomerTable')
    .then(()=>{
            getMySqlTable('getProjectTable')
    })
    .then(()=>{
            getMySqlTable('getOfferTable')
    })
    .then(()=>{
            getMySqlTable('getPhaseTable')
    })
    .then(()=>{
            console.log(customerTable);
            console.log(projectTable);
            console.log(offerTable);
            console.log(phaseTable)
    })

有人可以幫我嗎?

如果在回調中使用大括號,則需要返回一個值。 在每個then調用中執行“返回getMySqlTable(...)”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM