如何返回Promise称为值?

时间:2016-12-02 14:05:44

标签: javascript jquery ajax promise

我调用Promise API从ajax返回。我想从then()函数返回这样的.. 我的Ajax功能:

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}
  如何显示Promise Object的[[PromiseValue]]形式 它是否可行。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您无法从承诺外获取值,因为该值尚未计算。这是因为console.log(class_name)console.log(result)之前被称为,因为节点是异步的并且是单线程的。 get_data来电尚未回复,并且正在后台进行。

相反,您应该根据里面的承诺回调执行任何操作,当前您将返回result.name