如何将变量传递给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,并将变量传递给该函数,但是,我不想一次又一次地重复所有代码总是做同样的事情。
答案 0 :(得分:0)
考虑:
因此我会尝试类似的事情:
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;
}