Javascript 承诺解决得太快了

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)

我正在使用Promises,同时我有一个加载动画。
问题是我的承诺很快就解决了,装载机很快就消失了

因此,我想发出一个承诺,如果承诺在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
。你想等几点?对不起,我忘了最重要的电话。我过几分钟再打