从另一个函数延迟解析的返回
Return resolved deferred from another function
我正在用机器人制作一个自动对话的动画。
打印完第一条消息("嗨,看看这个!")后,我想转到下一个功能.then()
。然而,在这种情况下,我不知道如何设置r.resolve()
,它就像嵌套的一样。
var messages = [
"Hi there, take a look at this!",
"Enter your address",
"blah blah"
];
function printLetters(target, message, index, interval, n) {
r = $.Deferred();
$('#m'+n).fadeIn();
if (index < message.length) {
$(target).append(message[index++]);
setTimeout(function () {
printLetters(target, message, index, interval, n);
}, interval);
} else {
r.resolve();
}
elem.scrollTop = elem.scrollHeight;
return r;
}
function printMessage(n) {
r = $.Deferred();
setTimeout(function(){
$('#m'+n+'>p').empty();
r = printLetters('#m'+n+'>p', messages[n-1], 0, 40, n);
}, 400);
return r;
}
function startConversation() {
printMessage(1)
.then(showThumb1AndTapButton)
.then(showThumb2AndScroll)
.then(choosePaymentMethod)
.then(enterAddress);
}
startConversation();
在这种情况下,我想从printMessage(1)
转到下一个.then()
函数,但我不确定如何。
我不知道如果消息已经从其他功能打印完成,如何返回解析的r
?
首先,定义变量,在每个变量所需的范围中使用var
。
问题是如何处理r
变量。您正在创建deferred并将其存储在r
上,返回r
,然后,在函数结束400ms后,创建一个新的r
(因为以前的r
没有用var
定义,所以这个是超时处理程序函数中的另一个变量),printLetters
的输出是另一个deferred。。。最后一个CCD_ 14与CCD_。
我建议您将r
(或其他更具描述性的名称)定义为全局(在任何函数之外),只创建一次延迟对象,然后始终使用此变量。
更新
由于有几个函数需要返回一个deferred,因此可以将deferred作为参数传递。重点是与变量保持一致。例如(未测试,接受建议并自己尝试):
function printMessage(n) {
var r = $.Deferred();
setTimeout(function(){
$('#m'+n+'>p').empty();
printLetters(r, '#m'+n+'>p', messages[n-1], 0, 40, n); <--var needed for this r to be defined inside here
}, 400);
return r;
}
然后
function printLetters(r, target, message, index, interval, n) {
...
...
r.resolve(); <--Note this is the parameter r
}
无需返回任何内容或创建第二个延迟对象,您使用的是printMessage
创建和返回的同一对象。
相关文章:
- 从另一个函数延迟解析的返回
- 如何在另一个任务中正确使用延迟的gump任务返回的值
- jQuery 延迟的 AJAX 调用返回值
- 延迟对象在解析之前返回
- 将for循环从完成延迟到返回API调用
- jQuery deferred:用于延迟函数的返回,直到函数内的异步调用完成+获取返回值
- 从延迟中检索返回值
- 将延迟对象作为失败返回
- 从延迟的回调中返回承诺
- 在 node.js 中返回延迟嵌套承诺
- 异步函数返回未定义,$q延迟
- ajax-返回并防止延迟.then()执行
- 延迟返回变量,直到数据从Firebase同步
- 使用延迟对象/承诺的Ajax调用返回失败
- 在另一个AJAX调用后延迟返回
- 使用jQuery自定义JS Confirm Modals.延迟和基于按钮的返回值问题
- 如何使用jquery在phonegap类上返回延迟对象
- 如何在谷歌应用引擎中返回延迟任务的数据
- 返回延迟对象或null
- Jquery从函数完成后返回延迟