【问题标题】:Assigning a promise to a variable, not the result or executed Promise?将承诺分配给变量,而不是结果或执行的承诺?
【发布时间】:2019-09-18 00:36:40
【问题描述】:

假设我们有一个承诺:

const aPromise = new Promise(()=>{console.log('promise executed');}) 

只需分配这个 Promise,执行它,它就会显示在控制台上:

promise executed

当我调用 aPromise 时,它​​没有登录控制台,console.log(aPromise) 的结果显示它已解决。

我的问题是我如何分配一个 Promise 而不让它被执行/解决,所以我可以多次调用它?

【问题讨论】:

    标签: javascript promise es6-promise


    【解决方案1】:

    你可以把它包装成这样的函数:

    const getPromise = () => new Promise((resolve,reject) => {
        console.log('Promise executed')
        resolve()
    })
    

    现在你可以多次调用它:

    getPromise().then(() => { // do something })
    

    【讨论】:

      【解决方案2】:

      您可以简单地从函数返回一个承诺并将其分配给变量

      function returnpromise(val) {
        return new Promise((resolve, reject) => {
          if (val > 5) {
            resolve("resolved hello"); // fulfilled
          }
          else {
            reject("rejected"); // rejected
          }
        });
      }
      
      let prom=returnpromise(6);// assign promise to variable prom
      console.log(prom) // returns Promise { 'resolved' }
      
      // to get the data use it many times
      
      prom.then(a=>console.log(a));

      【讨论】:

        【解决方案3】:

        在 Promise() 中没有输入参数:

        function Promise() {
          console.log('promise executed');
        }
        
        const aPromise = new Promise();
        

        在 Promise(arguments) 中有输入参数

        function Promise(a) {
          console.log(a);
        }
        
        const aPromise = new Promise("promise executed");
        

        注意:在 Javascript 中不使用运算符“=>”,在 C/C++ 中使用运算符“=>”,请在此处查看更多信息:

        https://www.w3schools.com/jsref/jsref_operators.asp

        【讨论】:

        • 你不应该用函数覆盖 Promise 类。从 ES5 开始,JavaScript 也使用 =>。
        猜你喜欢
        • 2018-08-30
        • 2020-05-10
        • 2020-04-30
        • 1970-01-01
        • 1970-01-01
        • 2018-12-23
        • 1970-01-01
        • 2017-11-28
        • 1970-01-01
        相关资源
        最近更新 更多