此JavaScript代码如何工作(逐步解释)?

时间:2019-05-22 03:08:50

标签: javascript

能否请您逐步解释一下此代码的作用?我也不明白如何让inStock = order.every(item =>库存[item [0]]> = item [1])检查该项目的库存是否大于0。另外,由于我难以理解,您能否简要说明什么是诺言?谢谢。

const inventory = {
    sunglasses: 1900,
    pants: 1088,
    bags: 1344
};

const checkInventory = (order) => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            let inStock = order.every(item => inventory[item[0]] >= item[1]);
            if (inStock) {
                resolve(`Thank you. Your order was successful.`);
            } else {
                reject(`We're sorry. Your order could not be completed because some items are sold out.`);
            }
        }, 1000);
    })
};

module.exports = { checkInventory };

1 个答案:

答案 0 :(得分:0)

Promise对象表示异步操作的最终完成(或失败)及其结果值。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

对于您而言,您正在使用setTimeout来模拟等待1000ms延迟的异步操作。

inStock的值是布尔值。 every()方法测试数组中的所有元素是否通过提供的函数实现的测试。它返回一个布尔值。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every

every方法需要回调,或者要在order数组中的每个元素上运行一个函数。第一个参数是数组中当前项目的值。但是,我不认为item => inventory[item[0]] >= item[1]正在检查该物品是否有库存。如果item是带有钥匙name的对象(例如太阳镜),则应仅检查inventory对象中是否存在项目名称,如果存在,则检查其是否大于0例如item => inventory[item.name] > 0

因此,如果inStock为真,我们将兑现承诺并发送“谢谢”。如果inStock为假,则我们将拒绝诺言,并这样告知呼叫者。

简而言之,Promise是用于处理异步操作(例如,击中某些API端点)的对象。延迟很小,在收到响应值后,我们可以对其进行处理。