Javascript 将值传递给下一个参数

Javascript 将值传递给下一个参数,javascript,asynchronous,promise,Javascript,Asynchronous,Promise,基本上,我对这些承诺很困惑。因为,我还是一个新手,不知道如何处理异步的回调方法 我有这样的代码 const Search=函数(名称){// 返回新承诺((解决,拒绝)=>{// 设o=[{ “名称”:“苹果”, “数量”:10 }, { “名称”:“葡萄”, “数量”:5 } ] 让result=o.filter((n)=>n.name==name) 如果(结果长度{ 设o={ 名称 量 }=数据 o、 数量=解析整数(o.数量)-数量 如果(o.数量

基本上,我对这些承诺很困惑。因为,我还是一个新手,不知道如何处理异步的回调方法

我有这样的代码

const Search=函数(名称){//
返回新承诺((解决,拒绝)=>{//
设o=[{
“名称”:“苹果”,
“数量”:10
},
{
“名称”:“葡萄”,
“数量”:5
}
]
让result=o.filter((n)=>n.name==name)
如果(结果长度<1){
拒绝
返回
}
解析(结果[0])
})
}
常量购买=功能(数据、数量){
返回新承诺((解决、拒绝)=>{
设o={
名称
量
}=数据
o、 数量=解析整数(o.数量)-数量
如果(o.数量<0){
抛出新错误(“Oops.Quantity为空!”)
}
决议(o)
})
}
常量结果=功能(测试){
console.log(测试)
}
主要目的是,如何在Buy函数的
qty
参数中输入值

我本来是这样做的,但结果并不是我所期望的。我敢肯定,我的代码缺失了一些东西,但我不知道

搜索(“苹果”)
.然后(买,4)
.然后(结果)
结果是:

{ name: 'Apple', quantity: NaN }
主要目标是:

{ name: 'Apple', quantity: 6 }
无论如何,谢谢:)


您试图将
Buy
直接传递到
。然后
,但是
中的函数始终只传递一个参数。因此,您可以在匿名函数中调用并返回
Buy
,在该函数中,您可以应用任意多个参数。

您可以利用范围

function executeSearch() {
    Search("Apple").then(function (searchResult) {

        // feel free to use the result of the first promise 
        // as input parameters to the second if desired
        const name = searchResult.name;
        const quantity = searchResult.quantity;

        Buy(searchResult, 4).then(Result);

    });
}

这与另一个答案类似,但表明您可以以多种方式使用第一个承诺的结果来执行第二个承诺。

然后
方法接受一个函数,因此您可以将“购买”更改为以下内容:

const Buy = function(qty) {
  return function(data){
    return new Promise((resolve, reject) => {
      let o = {
        name,
        quantity
      } = data
      o.quantity = parseInt(o.quantity) - qty
      if (o.quantity < 0) {
        throw new Error("Oops. Quantity is Empty!")
      }
      resolve(o)
    })
  }
}

可能重复的Whats
const{name,quantity}=searchResult
for?@Satpal这只是一个演示,表明您可以在该上下文中访问这些变量,如果需要,您可以将它们用作输入参数。我实际上也想到了这个解决方案——返回一个函数,就像“curried”函数情况一样。唯一的缺点是,对我来说,当函数返回这样的函数时,逻辑就更难理解了。啊,我明白了。那么,then本身只有一个参数,所以我们需要修改then函数并手动返回到另一个函数中?是的。谈到'OnCompleted'参数,“如果承诺已实现,则调用函数。此函数有一个参数,即实现值。”,它是从承诺解析的值。
const Buy = function(qty) {
  return function(data){
    return new Promise((resolve, reject) => {
      let o = {
        name,
        quantity
      } = data
      o.quantity = parseInt(o.quantity) - qty
      if (o.quantity < 0) {
        throw new Error("Oops. Quantity is Empty!")
      }
      resolve(o)
    })
  }
}
Search("Apple")
  .then(Buy(4))
  .then(Result)