代码之家  ›  专栏  ›  技术社区  ›  mana

如何使脚本等待一个承诺的结果,然后继续?

  •  0
  • mana  · 技术社区  · 4 年前

    我一直在努力寻找解决这个问题的办法。

    我有一个承诺,就是等待从外部服务器获取用户信息,然后决定重定向到下一个页面。然而,我的脚本并不是等待承诺返回,而是继续执行下一行代码,这将重定向到错误的页面,然后,一旦承诺返回,它将再次重定向到正确的页面。

    我想要的是等待承诺并基于返回的数据的代码,然后重定向到正确的页面。

    function redirect(user){
    
       return new Promise((resolve, reject) => {
         //send request to external server and waiting for the response
         //if response == 1 then redirect to page1
    
      }
    }
    
    redirect(user).then(() => {
       //redirect to page 2 here
    });
    

    但是,结果总是重定向到page2,然后重定向到page1

    0 回复  |  直到 4 年前
        1
  •  1
  •   Ahmet Zeybek    4 年前

    下面是一个关于promise用法的示例

    function redirect(user) {
      return new Promise((resolve, reject) => {
        fetch(user)
          .then(response => response.json())
          .then(data => resolve(data.data))
          .catch((error) => {
            reject(error);
          })
      })
    }
    
    redirect("https://reqres.in/api/users/2").then((data) => {
      // You should make redirection here
      /*
      if(data == 1) {
        // your operation
      } else {
        // another operation
      }
      */
      console.log(data)
    });
        2
  •  1
  •   qvn    4 年前

    你的 redirect await 为服务器请求。

    https://jsfiddle.net/4g6juyf5/1/

    function redirect(user) {
      return new Promise(async (resolve, reject) => {
        // Wait for the first page to finish
        const result = await fetch('https://jsonplaceholder.typicode.com/todos/1');
    
        // finished then resolve
        if (result != undefined) {
          console.log("Page 1 requested")
          resolve(true)
        }
      })
    }
    
    const user = "John";
    
    redirect(user).then(async () => {
      //redirect to page 2 here
      console.log("Requesting Page 2")
      const result = await fetch('https://jsonplaceholder.typicode.com/users')
    });
    

    注意,这段代码仍然相当草率。如果你发布你的实现,我们也许可以改进它。