Rya*_*yan 3 javascript jquery callback
我已经构建了一个以以下内容开头的javascript文件:
var myApp = function () {
var CLIENT_ID = 'xxxxxxx';
var DISCOVERY_DOCS = ["https://www.googleapis.com/discovery/v1/apis/gmail/v1/rest"];
var SCOPES = 'https://www.googleapis.com/auth/gmail.readonly https://www.googleapis.com/auth/analytics.readonly https://www.googleapis.com/auth/drive.readonly';
var authorizeButton = document.getElementById('authorize-button');
return {
Run Code Online (Sandbox Code Playgroud)
这些函数声明如下:
getSent: function(callback) {
var request = gapi.client.gmail.users.messages.list({
'userId': 'me',
'labelIds': 'SENT',
'maxResults': 10
});
request.execute(function(response) {
$.each(response.messages, function() {
var messageRequest = gapi.client.gmail.users.messages.get({
'userId': 'me',
'id': this.id
});
messageRequest.execute(myApp.appendMessageRow);
});
});
},
Run Code Online (Sandbox Code Playgroud)
然后运行一个调用其他函数的函数:
myApp.init();
Run Code Online (Sandbox Code Playgroud)
在谷歌请求函数getsent()完全完成后,如何推迟运行函数.我已经尝试将回调用于另一个函数并且它运行但是当getsent()仍在执行时它会运行.完成后我可以使用jQuery方法来运行回调吗?
我试过了:myApp.getSent(myApp.gMailSyncComplete()); //尽早运行
我尝试过:myApp.getSent().done(myApp.gMailSyncComplete()); //没有定义jQuery
代码中的一些重要错误:
getSent接受回调的函数,但您根本不会调用回调,因此它不会被执行.当其他一切都完成后,你应该执行回调.考虑到这两件事,并使用async,这将是结果代码的一个示例:
getSent: function (callback) {
var request = gapi.client.gmail.users.messages.list({
'userId': 'me',
'labelIds': 'SENT',
'maxResults': 10
})
request.execute(function (response) {
async.map(response.messages, function (msg, cb) {
var messageRequest = gapi.client.gmail.users.messages.get({
'userId': 'me',
'id': msg.id
})
messageRequest.execute(function (result) {
myApp.appendMessageRow(result)
cb()
})
}, function (err) {
if (err) throw err
callback()
})
})
}
Run Code Online (Sandbox Code Playgroud)
callback参数必须是函数.为了清楚起见,让我们将您编写的代码翻译myApp.getSent(myApp.gMailSyncComplete())成一个等效的结构:
var callback = myApp.gMailSyncComplete()
myApp.getSent(callback)
Run Code Online (Sandbox Code Playgroud)
执行此操作时,您没有传递函数,而是传递函数的结果,因为您正在执行它.这就是它立即执行的原因.正确的方法是:
var callback = myApp.gMailSyncComplete
myApp.getSent(callback)
Run Code Online (Sandbox Code Playgroud)
或者,在你的单线示例中, myApp.getSent(myApp.gMailSyncComplete)
| 归档时间: |
|
| 查看次数: |
258 次 |
| 最近记录: |