Javascript 承诺解决得太快了
我正在使用Promises,同时我有一个加载动画。Javascript 承诺解决得太快了,javascript,ecmascript-6,promise,es6-promise,Javascript,Ecmascript 6,Promise,Es6 Promise,我正在使用Promises,同时我有一个加载动画。 问题是我的承诺很快就解决了,装载机很快就消失了 因此,我想发出一个承诺,如果承诺在3秒前得到解决,请等待剩余的时间 示例 export const operation = () => { const a = new Date(); const myPromise = doAction().then(() => { const b = new Date(); if((b - a) < 3000)
问题是我的承诺很快就解决了,装载机很快就消失了 因此,我想发出一个承诺,如果承诺在3秒前得到解决,请等待剩余的时间 示例
export const operation = () => {
const a = new Date();
const myPromise = doAction().then(() => {
const b = new Date();
if((b - a) < 3000)
operationIsDone();
else
setTimeout(() => {operationIsDone();}, b - a)
});
}
导出常量操作=()=>{
常数a=新日期();
const myPromise=doAction()。然后(()=>{
常数b=新日期();
如果((b-a)<3000)
操作完成();
其他的
setTimeout(()=>{operationsDone();},b-a)
});
}
有没有npm或者更好的方法?
提前感谢。使用第二个承诺更容易,它只需要运行最短的等待时间。然后使用
Promise.all
等待两者完成。
这样,您的脚本将始终至少等待默认延迟,但如果yourOwnPromise
的等待时间超过默认延迟,则等待时间也会更长
const wait=delay=>新承诺(resolve=>setTimeout(resolve,delay));
const doAction=()=>等待(500);//TODO用您自己的函数替换它
const yourOwnPromise=doAction();
你自己的承诺。然后(()=>{
log('yourOwnPromise now resolved');
});
承诺。全部([你自己的承诺,等等(3000)]。然后(()=>{
log(“现在都已解决”);
});代码>使用只运行最短等待时间的第二个承诺要容易得多。然后使用Promise.all
等待两者完成。
这样,您的脚本将始终至少等待默认延迟,但如果yourOwnPromise
的等待时间超过默认延迟,则等待时间也会更长
const wait=delay=>新承诺(resolve=>setTimeout(resolve,delay));
const doAction=()=>等待(500);//TODO用您自己的函数替换它
const yourOwnPromise=doAction();
你自己的承诺。然后(()=>{
log('yourOwnPromise now resolved');
});
承诺。全部([你自己的承诺,等等(3000)]。然后(()=>{
log(“现在都已解决”);
});代码>这也是我在假货中的做法。简单、简短、有效。b-a
很可能会导致非常小的数目,因此基本上会立即执行setTimeout()
的回调。ist到底是什么,这部分应该做什么?我建议使用Date.now()
而不是new Date
这个代码毫无意义b-a
是Date.now()-Date.now()
,在大多数情况下(或偶尔1
)是0
。你想等几点?对不起,我忘了最重要的电话,我会在几分钟内把它修好的。这也是我假造的方法。简单、简短、有效。b-a
很可能会导致非常小的数目,因此基本上会立即执行setTimeout()
的回调。ist到底是什么,这部分应该做什么?我建议使用Date.now()
而不是new Date
这个代码毫无意义b-a
是Date.now()-Date.now()
,在大多数情况下(或偶尔1
)是0
。你想等几点?对不起,我忘了最重要的电话。我过几分钟再打