Javascript 如何在异步函数与延迟jquery之间同步
我有两个函数,我想在它们之间同步 第一个函数是异步函数。 只有当我从第一个函数得到结果时,我才想调用第二个函数 我试过这个密码Javascript 如何在异步函数与延迟jquery之间同步,javascript,Javascript,我有两个函数,我想在它们之间同步 第一个函数是异步函数。 只有当我从第一个函数得到结果时,我才想调用第二个函数 我试过这个密码 $.when(update().then(function (data) { alert(1); $.when(func1(),func2()).then( function(dataFunc1,dataFunc2) {}); }); update : function(){ var d
$.when(update().then(function (data) {
alert(1);
$.when(func1(),func2()).then( function(dataFunc1,dataFunc2) {});
});
update : function(){
var dfd = $.Deferred();
d3.json("test.json", function(json) {
var data = createData()
dfd.resolve(data);
return dfd.promise();
}};
问题是调用更新,然后调用d3,json,但不执行d3,json的逻辑,因为它是异步函数,所以会发出警报(1)
我认为只有当更新函数完成,并且我将从d3.json获得数据时,警报(1)才会发出
我错过什么了吗?
我也读了reslove和promise,我是否只需要在需要传递参数时使用reslove?当我需要使用promise时?我不确定你做错了什么,你的代码看起来有语法错误 我重新制作了它:
$.when((function () {
var dfd = $.Deferred();
d3.json("test.json", function(json) {
var data = createData()
dfd.resolve(data);
});
return dfd.promise();
}())).then(function (data) {
alert(1);
$.when(func1(),func2()).then( function(dataFunc1,dataFunc2) {
alert(2);
});
});
这应该行得通。我打断了您的函数,修复了一些语法错误,它工作正常:
$.when(update()).then(function (updateData) {
console.log(updateData);
$.when(func1(),func2())
.then(function(dataFunc1, dataFunc2) {
console.log(dataFunc1 + ' ' + dataFunc2);
});
});
最突出的问题是第一行的语法错误:
$.when(update()).then(function (data) {
// ^ missing closing parenthesis
此外,您还需要在任何回调之外回复您的承诺:
update: function(){
var dfd = $.Deferred();
d3.json("test.json", function(json) {
var data = createData()
dfd.resolve(data);
// dont return a promise here
}};
// return it out here
return dfd.promise();
}
您的问题是由于d3.json()调用的异步性质造成的,即函数调用后的行的执行不是等待完成d3.json()函数。您可以使用延迟方法修复此问题。使用delay并在json调用之后尝试暂停执行几秒钟 它没有工作,它仍然到达d3。json代码没有先执行逻辑警报(1)发出,然后继续执行d3的逻辑。josn@user1365697
resolve
的意思是“告诉等待此操作完成的人此操作已完成”,promise
是您给消费者的令牌,以便他们可以监听解析。我需要同时使用它们吗?@user1365697 yes。当时传递给的函数应始终返回一个延迟
或承诺
对象,以使其正常工作。我必须使用setTimeout吗?@user1365697否。我使用setTimeout来说明异步延迟。