能否请您逐步解释一下此代码的作用?我也不明白如何让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 };
答案 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端点)的对象。延迟很小,在收到响应值后,我们可以对其进行处理。