web-dev-qa-db-ja.com

戻る前に約束を数秒待たせてください

約束を返す関数があります。この関数では、サードパーティベンダーを呼び出して、サーバーを介してプッシュ通知を送信します。

それはのように見えます

apiGetLoggedInUser.then(
  user => {
    return sendMessage(user.name);
  }
)

ただし、実際にこのsendMessage関数を呼び出す前に、3秒間待機することにしました。ただし、sendMessageは提供されているため、変更しないことをお勧めします。

「同期」操作を削除するためにpromiseが使用されているため、このシナリオで実際に「待機」部分を実行する方法を知りたいと思います。

私は正しく理解していますか?何をすればよいでしょうか?

10
eddie.xie

次の約束を遅らせる別の約束をチェーンに挿入します。

apiGetLoggedInUser
    .then(user => {
        return new Promise(resolve => setTimeout(() => resolve(user), 3000));
    })
    .then(user => sendMessage(user.name))
9
deceze

別のアプローチ-多くの場所でこの種のことをしたい場合に便利です

このビットは一度行われます

Promise.prototype.thenWait = function thenWait(time) {
    return this.then(result => new Promise(resolve => setTimeout(resolve, time, result)));
};

次に、この例の使用法のように、どこでも使用できます

apiGetLoggedInUser.thenWait(3000).then(user => sendMessage(user.name));
3
Jaromanda X

タイムアウト後にsendMessageを呼び出す新しいpromiseを作成します。

apiGetLoggedInUser.then(
  user => {
    return new Promise((resolve, reject) => {
       setTimeout(() => {
          sendMessage(user.name).then(resolve, reject);
       }, 3000)
    });
  }
)
1
radmen