将变量传递给Javascript承诺

时间:2015-09-28 02:09:57

标签: javascript ajax

如何将变量传递给Promise?

这是这笔交易。我需要一个可以被不同功能调用的Promise。 Promise只发送一个ajax请求,该请求查找mySQL表中的条目数并设置一个全局变量(var numberOfEntries =#)。

ajax请求需要两个变量才能工作。

var promise = new Promise(function(resolve, reject) { 
var request = $.ajax({
    method: "POST",
    url: "grabDataFromSQL.php",
    data: { data1: variable1, data2: variable2 }
});
request.done(resolve(data));

所以使用promise(主要使用全局变量)的函数看起来像这样:

function doSomeStuff() {
promise.then( // finish up here )
}

为了使承诺有效,它总是需要这2个变量。那么......我该怎么做呢?有办法吗?我的逻辑不正确吗?我很困惑。

我可以在调用promise.then()的同一个函数中定义promise,并将变量传递给该函数,但是,我不想一次又一次地重复所有代码总是做同样的事情。

2 个答案:

答案 0 :(得分:0)

考虑:

  1. Promise对象不可调用。
  2. $。ajax返回jqXHR Object,他们告诉我实现了Promise接口。
  3. 因此我会尝试类似的事情:

    function myAjaxReq( data1, data2)
    {   var o = {method: "POST", url: "grabDataFromSQL.php", data: {} };
        o.data.data1 = data1;
        o.data.data2 = data2;
        return $.ajax(o);
    }
    
    var promise = myAjaxReq( value1, value2);
    promise.then( onSuccess, onFailure); // parameters are functions
    

答案 1 :(得分:0)

好的,在我输入我的解决方案时,Traktor53给了我一个很棒的答案,我将接受。我仍然会发布这个替代答案,但万一有人感兴趣,但Traktor53的回答肯定是更好的(更清洁,更棒的发现$ .ajax()现在返回使用Promise界面的对象)。

这是我的另一个答案:

谢谢jfriend00。你为我澄清了一些事情。我的解决方案是创建一个创建并返回承诺的函数。然后我可以在其他函数中调用这个可重用的函数。

因此,第一步是创建一个创建promise的函数,该函数对某些数据发出ajax请求:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // find the hideme div
        HtmlGenericControl div = (HtmlGenericControl)e.Row.FindControl("hideme");

        // set the visible property
        div.Visible = false;
    }
}

第二步是在需要数据时调用该函数:

function findData(var1, var2) {
var promise = new Promise(function(resolve, reject) {
    var request = $.ajax({
    method: "POST",
    url: "grabDataFromSQL.php",
    data: { data1: var1, data2: var2 }
    });

    request.done(function(data) {
        resolve(data);
    });
    });
    return promise;
}