javascript - 为什么我的第二个 javascript promise 调用返回与第一个相同的值?

标签 javascript es6-promise

大家好,我是 javascript 的新手,最近一直在学习 promises。在继续我的逻辑之前,我试图等待网络调用的结果。为此,我认为我需要一个等待网络调用结果的 promise 。我一直在练习 promises 并注意到一些我不理解的行为。

var mybool = false;

// Promise
var mypromise = new Promise(
    function (resolve, reject) {
        if (mybool) {
            var pvalue = 'PASS';
            resolve(pvalue);
        } else {
            var fvalue = new Error('FAIL');
            reject(fvalue);
        }
    }
);


// call promise
var callpromise = function () {
    mypromise
        .then(function (fulfilled) {
            // yay, you got a new phone
            console.log(fulfilled);
        })
        .catch(function (error) {
            // ops, mom don't buy it
            console.log(error.message);
        });
}

callpromise();
console.log('This will appear first since prev function call is still thinking');
mybool = true;
console.log(mybool);
callpromise();

所以你可以看到 var mybool确定 promise 函数的输出。当我运行这个程序时,这是输出:

"This will appear first since prev function call is still thinking"
true
"FAIL"
"FAIL"

谁能解释为什么即使翻转了 mybool var 第二个callpromise()仍在输出一个我只希望来自 mybool = false 的值?

最佳答案

Promise 不会被“调用”,而是被创建。在实际调用 callpromise 之前,您创建了一次 mypromise。届时,mybool 为假。如果您想在代码中的特定点创建 Promise,或者如果您想要多个 Promise,请在函数内部创建 Promise。

关于javascript - 为什么我的第二个 javascript promise 调用返回与第一个相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56007691/

相关文章:

javascript - 在 ... 的处理程序中创建了一个 promise ,但没有从中返回

javascript - 变量作用域和 javascript 执行上下文

javascript - Angular JS 未捕获错误 : [$injector:nomod]

javascript - Chrome 设备模式下 Google map 标记图标周围的空白区域

javascript - 向 Promise.all() 添加一个 Promise

javascript - 生成器不评估 promise

javascript - RxJS:auditTime 和 sampleTime 之间的区别?

javascript - 对 Outlook API 的 POST Ajax 调用 - 访问被拒绝

javascript - 从返回的 Promise 中获取 PromiseValue

javascript - 当 return new Promise((resolve, reject) => {}) 忘记调用 resolve 或 reject 时会发生什么?