javascript - Promise 不等待超时

标签 javascript node.js promise

我正在学习 Promise 库,但遇到以下问题。

//Function for getting sum
    function getSum(n1, n2) {   
       var isAnyNegative = function() {   
          return n1 < 0 || n2 < 0;   
       }
       var promise = new Promise(function(resolve, reject) {   
          if (isAnyNegative()) {   
             reject(Error("Negatives not supported"));   
          }   
          resolve(n1 + n2)
       });   
       return promise;   
    }

 ////Function for getting Difference
    function getDiff(n1,n2){
        var diff = n1-n2;
        setTimeout(function(){
            console.log("value of diff--- ", diff)
            return diff;
        }, 2000)
    }

    getSum(5,6)
    .then(function(callbackResult){
        console.log("first callback-Result- ", callbackResult)
        return getDiff(14,11);
    }, function(error){
        //handling error
    })
    .then(function(callbackResult){
        console.log("second callback--Result- ", callbackResult)
        return getSum(22,22);
    }, 
    function(error){
        //handling error
    })
    .then(function(callbackResult){
        console.log("third callback--Result- ", callbackResult)
    }, function(error){
        //handling error
    })

此代码片段的输出:-

first callback-Result-  11
second callback--Result-  undefined
third callback--Result-  44
value of diff---  3

为什么第二个回调不等待差异函数返回。我认为这是同步代码的 Promise 库的主要功能。

最佳答案

您必须以异步方式处理setTimeout。例如:

function getDiff(n1,n2){
   return new Promise((resolve) => {
        const diff = n1 - n2;

        setTimeout(() => {
            console.log('value of diff--- ', diff);

            return resolve(diff);
        }, 2000);
    }
});

关于javascript - Promise 不等待超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46404912/

相关文章:

javascript - 如何在 jQuery 中加载页面后替换图像 src

javascript - 在 JavaScript 中将 RFC 1123 日期格式转换为正常日期时间

javascript - 按 2 个动态键对数组进行排序

Javascript - 使用 Promise 运行 for 循环

node.js - 如何在以多部分形式处理文件流之前等待字段

javascript - 我该如何优化这段代码?

Node.js TTL 无法使数据过期

node.js - 在 Node.js 中如何注意到缺少的函数?

reactjs - 如何禁用显示 'Unhandled Rejection (Error):XXXXX' 的 react 开发错误面板?

javascript - 如何将phonegap 2.5的插件升级到最新的3.1版本?以及向 phonegap 添加附加插件的流程是什么