2016-12-02 50 views
0

我從ajax返回一個Promise API。我想從然後返回()這樣的函數.. 我阿賈克斯funcation:如何將Promise稱爲值?

function get_data(url, id) { 
return new Promise(function (resolve, reject) { 
    xmlHttp.open("GET", url + "/" + id, true);   
    xmlHttp.onerror = reject; 
    xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xmlHttp.onreadystatechange = function() { 
     if (this.readyState === 4 && this.status === 200) { 
      resolve(JSON.parse(this.responseText)); 
     } 
    }; 
    xmlHttp.send(null); 
    }); 
} 

調用Ajax的功能:

var class_name = ''; 
    var url = site_url + "/student/get_classes"; 
    var id = 2; 
    class_name = get_data(url, id).then(function (result) { 
     console.log(result);//first console 
     return result.name; 
    }); 
    console.log(class_name);//second console 

我的控制檯:
第一個控制檯:Object {id: "1", name: "Class One", shift_id: "1", session_id: "1"}
第二個控制檯:Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
如何顯示[[PromiseValue]]窗體Promise Object。
它是否可行?提前致謝。

回答

0

您無法從承諾之外獲得價值,因爲價值尚未計算。這是因爲console.log(class_name)console.log(result)之前被稱爲,這是由於節點是異步和單線程的。電話get_data根本沒有回覆,並且正在後臺進行。

取而代之,你應該做任何操作取決於的結果裏面的承諾回調,你當前返回result.name

相關問題