【问题标题】:Error with using Promise function in javascript在 javascript 中使用 Promise 函数时出错
【发布时间】:2018-09-06 20:09:07
【问题描述】:

我正在尝试使用 Promise 函数。 promise 函数嵌套在 dataService 函数中。 dataService 函数内部有一个 getData 方法,它定义了一个 promise 然后检查,如果内部随机生成的数字大于 5,则 promise 变量执行 resolve,否则它是一个拒绝(内置的 promise 参数)。 then 属性记录答案。但是我遇到了错误,例如- 无法读取未定义的属性“then”和无法读取未定义的属性“resolve” 在 Promise.html:19。 请帮忙。

 <html>

 <head>
<title>Promise</title>
</head>

<body>
<script>
   function dataService() {
        var obj = {};
        console.log('inside function');

        obj.getData = function () {
            var promise = new Promise(function(resolve,reject){

                var number = Math.random() * 10;

                if (number > 5) {
                   ( promise.resolve("Resolved promise " + number));

                }
                else
              ( promise.reject("Promise Rejected " + number));

        })};

            return obj;

        }


    var data = dataService();
    console.log(data);

   data.getData()
        .then(function(val) {
            console.log("It has been a success"),
            console.log(val)
         } )
        .catch(function (err) {
                console.log("It has been failed"),
                console.log(err)
        });
  </script>

 </body>

 </html>

【问题讨论】:

    标签: javascript es6-promise


    【解决方案1】:

    你应该在函数被调用时返回 Promise:

    function dataService() {
            var obj = {};
            console.log('inside function');
    
            obj.getData = function () {
                return new Promise(function(resolve,reject){
    
                    var number = Math.random() * 10;
    
                    if (number > 5) {
                       ( resolve("Resolved promise " + number));
    
                    }
                    else
                  ( reject("Promise Rejected " + number));
    
            })};
    
                return obj;
    
            }
    
    
        var data = dataService();
        console.log(data);
    
       data.getData()
            .then(function(val) {
                console.log("It has been a success"),
                console.log(val)
             } )
            .catch(function (err) {
                    console.log("It has been failed"),
                    console.log(err)
            });

    【讨论】:

      【解决方案2】:

      不要使用promise.resolvepromise.reject。只需使用resolvereject

      此外,您需要从您的 getData 函数中实际返回承诺。

      尝试通过教程自学,例如这个:https://developers.google.com/web/fundamentals/primers/promises

      【讨论】:

      • 仍然出现错误 --> 无法读取未定义的属性 'then'。并且 --> Uncaught (in promise) Promise Rejected 2.0840987564690128
      【解决方案3】:

      你返回的是一个对象而不是一个承诺对象

      obj.getData = function () {
          var promise = new Promise(function(resolve,reject){
          // omitted
          return obj; // <---- culprit.
      }
      

      只需返回 promise 即可

      obj.getData = function () {
          var promise = new Promise(function(resolve,reject){
          // omitted
          return promise; // <---- changed
      }
      

      这样在执行data.getData() 时,您将收到一个 Promise 对象。该对象具有.then.catch 函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-19
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 2018-01-02
        • 1970-01-01
        相关资源
        最近更新 更多