1
我一直在阅读很多关于JQuery's
deferred
的对象。我可以看到它是如何工作的去耦合代码。我使用Async.js写了这个Orignally,但会被推荐使用promise。jquery推迟异步函数
我发现的大多数例子只是将事情链接到AJAX
调用。我想链接一个异步函数,但不知道如何去做。我正在从数据库中检索一段时间,然后使用这段时间作为URL中的一个参数,最后我想要拨打AJAX
。
这是我在哪里:
var fetch = function (contactId, callback, errorCallback)
{
var buildPromise = new $.Deferred();
var getLastImportTime = function()
{
var querySuccess = function (tx, result)
{
buildPromise.resolve("7 oclock");
};
var queryError = function (tx, e)
{
buildPromise.reject("Error querying database");
};
database.open();
database.query("SELECT EventImportTime FROM Contact WHERE Contact.Id = ?", [contactId], querySuccess, queryError);
};
var buildUrl = function (lastImportTime)
{
console.log("I do happen");
var url = "http://";
url += 'MobileGetChangedEvents.aspx?Reference=';
url += '&LastImportTime=';
url += lastImportTime;
url += '&Format=JSON';
return url;
};
var makeRequest = function (url)
{
getJSON(url, callback, errorCallback)
};
$.when(getLastImportTime()).pipe(buildUrl).then(makeRequest);
也是我管的方法似乎是第一个叫:■
啊好了,这是有道理的执行。构建url现在可以获得正确的值。我是否应该使用“.then”尝试打电话提出请求?或者我应该再次使用管道?在一分钟我得到“网址”是未定义的。 (对不起,这是我第一次承诺) – JonWells
@CrimsonChin与'pipe'一起使用的方法必须返回一个值。从API文档''这些过滤器函数可以返回一个新的值传递给管道承诺的done()或fail()回调“http://api.jquery.com/deferred.pipe/现在它应该可以工作如你所愿,不是吗? – pomeh
尝试用'.pipe(function(time){buildUrl(time)})'''更改'.pipe(buildUrl)'' – fcalderan