Javascript Jquery-具有延迟和承诺但不带setTimeout的链函数

Javascript Jquery-具有延迟和承诺但不带setTimeout的链函数,javascript,jquery,promise,jquery-deferred,Javascript,Jquery,Promise,Jquery Deferred,我需要一个接一个地执行2个函数,函数“A”中的内容在函数“B”中的内容执行之前完全完成 我找不到不使用setTimeout的示例。。这很奇怪 我有下面的例子(),它应该工作吗??我如何测试它是否工作?我可以使用什么虚拟代码来模拟SharePoint JSOM中的部件“//做事情”,比如说,需要5秒到30秒 var a = function() { var defer = $.Deferred(); //do stuff with SharePoint JSOM console.log('a(

我需要一个接一个地执行2个函数,函数“A”中的内容在函数“B”中的内容执行之前完全完成

我找不到不使用setTimeout的示例。。这很奇怪

我有下面的例子(),它应该工作吗??我如何测试它是否工作?我可以使用什么虚拟代码来模拟SharePoint JSOM中的部件“//做事情”,比如说,需要5秒到30秒

var a = function() {
var defer = $.Deferred();

//do stuff with SharePoint JSOM

console.log('a() called');

return defer;
};

var b = function() {
var defer = $.Deferred();

console.log('b() called');


return defer;
};



a().then(b);

简单地使用
承诺
(vanilla JS),然后用
链接它们

函数a(){
返回新承诺(函数(解析){
log(“等待两秒钟…”);
//此超时仅用于演示;)
setTimeout(函数(){
控制台日志(“A”);
解决();
}, 2000);
});
}
函数b(){
控制台日志(“B”);
}

a)然后(b)
Yes,只需使用
setTimeout
作为虚拟。如果
b
不执行任何异步操作,则不应返回延迟(或承诺)
then
也适用于同步回调。根据我测试和阅读的内容,您不能使用setTimeout作为虚拟,因为它不会停止调用代码。我不能使用预设延迟。是的,延迟或JSOM也不会停止调用代码,这就是它们的全部要点。嗨,我不是说完全停止代码。只是暂停函数B的执行,直到函数A执行为止(不使用setTimeout),你是说这不是Jquery deferred/Promissions的预期目的吗?嗨,我知道这种方法,但我只是想知道如何使用Jquery Promissions获得一个工作示例……但是setTimeout没有修复设置为2000毫秒的超时吗?我不想要固定的超时时间。我希望B在A自然结束时执行。
setTimeout
只是一个例子。您可以完全删除它。;)请看这里:@Zertix.netOK,您使用的是defer.resolve();在setTimeout语句之外,它仍然会等待所有东西(函数等)完成,只要defer.resolve();最后一行是吗?。我无法测试它,因为我没有任何一个单独运行数秒的伪函数。..@Zertix.net没有,因为您仍然希望在执行的任何操作完成后才执行.resolve(),这将需要某种回调(就像setTimeout一样)。承诺并不能避免回调的需要。