Javascript .然后()带着承诺订购
为什么我的Javascript .然后()带着承诺订购,javascript,promise,Javascript,Promise,为什么我的.then()chainprinter.done()没有显示我的消息 printer.done()应该显示一个消息模板 .then(() => { const whileHeapList = () => { setTimeout(() => { console.log(new Date()); console.log(1); setTimeout(() => {
.then()
chainprinter.done()
没有显示我的消息
printer.done()
应该显示一个消息模板
.then(() => {
const whileHeapList = () => {
setTimeout(() => {
console.log(new Date());
console.log(1);
setTimeout(() => {
console.log(2);
console.log(new Date());
}, 5000)
}, 5000);
};
whileHeapList();
}).then(() => {
printer.done()
});
我希望我的代码执行的是日志1,等待5秒日志2,然后打印出printer.done()
template消息
现在这是输出:
** TEMPLATE **
2017-01-30T04:19:54.111Z
1
2
2017-01-30T04:19:59.118Z
如果希望第二个
。然后
等待第二个设置超时
完成,则需要从第一个返回一个承诺。然后
在第二个设置超时
触发后解析
.then(function () {
var whileHeapList = function whileHeapList() {
return new Promise(function(resolve) { // added
setTimeout(function () {
console.log(new Date());
console.log(1);
setTimeout(function () {
console.log(2);
console.log(new Date());
resolve(); // added
}, 5000);
}, 5000);
}); // added
};
return whileHeapList(); // added a return
}).then(function () {
printer.done();
});
或者,在您的注释中使用尝试的代码
.then(function () {
var whileHeapList = function whileHeapList(resolve) {
setTimeout(function () {
console.log(new Date());
console.log(1);
setTimeout(function () {
console.log(2);
console.log(new Date());
resolve(); // added
}, 5000);
}, 5000);
};
return new Promise(whileHeapList);
}).then(function () {
printer.done();
});
我会做一个睡眠功能,然后与之链接
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
...
.then(() => sleep(5000))
.then(() => console.log(1, new Date()))
.then(() => sleep(5000))
.then(() => console.log(2, new Date()))
.then(() => printer.done())
顶部的代码
。然后,
不会返回等待的承诺,因此,printer.done
将几乎执行immediately@JaromandaX如果我有返回新承诺(whilehaplist)
而不是whilehaplist()
我得到了1,2和时间日志,但模板没有显示。我尝试了这个方法,但先打印模板,然后打印其余的。我试图先打印1,2和Date()
,然后打印模板。不确定发生这种情况的原因=/。我认为最后一个.then()
只有在完成之前才执行。then()
此代码将记录1、2,然后才会打印机。done()
执行。。。请确保您没有获取代码中的每个返回值-问题可能存在,因为您发布的代码与您实际使用的代码大不相同-因为代码中的嵌套超时没有任何有用的用途。。。如果需要,则要“等待”前面的中的一些异步代码。然后必须返回一个在异步完成时解析的承诺