簡體   English   中英

我如何使這個功能成為現實?

[英]How do I make this function a promise?

我正在使用快遞路線

app.get('/api/users/:username', (req, res) => {
  let username = req.params.username;
  findUserInApi(username)
    .then(foundUser => {
      if (foundUser) {
        res.status(403).send('User not found in api yet');
      }else{
        res.json(foundUser);
      }
    });
});

我希望findUserInApi是一個承諾,因為我需要等待該函數內部發生的提取。

這是findUserInApi

const findUserInApi = (username) => {
  findChattersPerRole()
    .then(chattersPerRole => {
      console.log(`${username} should\'ve been added by now...`);
      //console.log(chattersPerRole);
      let wantedUser = find(chattersPerRole, {username});
      if (!wantedUser) {
        console.log(`${wantedUser} wasn't found m8`);
        return Promise.resolve(null);
      }
      console.log('wanteduser is: ', wantedUser);
      getUserByUsername(wantedUser.username)
        .then(foundUser => {
          console.log('founduser is: ', foundUser);
          return Promise.resolve(foundUser);
        });
    });
};

我以前只在找不到時返回null,而在發現他時僅返回foundUser,但是我試圖通過返回Promise.resolve來做出承諾。 我不確定如何解決此問題...

您需要返回整個承諾鏈,如下所示:

const findUserInApi = (username) => {
  return findChattersPerRole()
    .then(chattersPerRole => {
      console.log(`${username} should\'ve been added by now...`);
      //console.log(chattersPerRole);
      let wantedUser = find(chattersPerRole, {username});
      if (!wantedUser) {
        console.log(`${wantedUser} wasn't found m8`);
        return Promise.resolve(null);
      }
      console.log('wanteduser is: ', wantedUser);
      getUserByUsername(wantedUser.username)
        .then(foundUser => {
          console.log('founduser is: ', foundUser);
          return Promise.resolve(foundUser);
        });
    });
};

請注意,在return findChattersPerRole().then()添加了return

但是,您正在嵌套承諾鏈。 那是一種反模式。 另外,如評論中所述,您無需在Promise.resolve()中使用Promise.resolve() .then() ,它會自動應用。 您的代碼可以重組為如下形式:

const findUserInApi = (username) => {
  return findChattersPerRole()
    .then(chattersPerRole => {
      console.log(`${username} should\'ve been added by now...`);
      //console.log(chattersPerRole);
      return find(chattersPerRole, {username});
    })
    .then(wantedUser => {
      if (wantedUser) {
        console.log('wanteduser is: ', wantedUser);
        return getUserByUsername(wantedUser.username);
      }
      else console.log(`${wantedUser} wasn't found m8`);
    })
    .then(foundUser => {
      if (foundUser) console.log('founduser is: ', foundUser);
      return foundUser;
    });
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM