Javascript coffeescript中带有两个异步函数的promise
背景: 我需要调用一个函数(函数a)来发出两次HTTP请求,之后,我需要调用另一个函数(函数B)来计算这两个数组 正常的顺序应该是Javascript coffeescript中带有两个异步函数的promise,javascript,coffeescript,Javascript,Coffeescript,背景: 我需要调用一个函数(函数a)来发出两次HTTP请求,之后,我需要调用另一个函数(函数B)来计算这两个数组 正常的顺序应该是 (函数A和函数A)异步 当其他两项完成时,功能B 所以我向自己保证,但问题是,我不知道如何正确地语法,我使用Coffeescript 这是我到目前为止得到的,但现在它不起作用 myCoolPromise = () -> return new Promise (resolve, reject) -> postRequest(diagUrl, d
- (函数A和函数A)异步
- 当其他两项完成时,功能B
myCoolPromise = () ->
return new Promise (resolve, reject) ->
postRequest(diagUrl, diagnosisBody, storesConnectionObject)
postRequest(storesUrl, brandBody, storesObject)
success = true
if success
resolve 'stuff worked'
else
reject Error 'it broke'
myCoolPromise(storesObject.storesArray, storesConnectionObject.storesArray, absentObject).then (response) ->
console.log 'success', response
handleResult(storesObject.storesArray, storesConnectionObject.storesArray, absentObject)
.catch (error) ->
console.error 'failed', error
这段代码有很多问题,所以我将逐一讨论 首先,您使用以下代码调用函数:
myCoolPromise(storesObject.storesArray, storesConnectionObject.storesArray, absentObject).then (response) ->
为了使其工作,您的myCoolPromise
方法需要接受3个参数(现在需要0)
其次,在Coffeescript中,新承诺
行后面的缩进是绝对必要的。现在你有这个:
return new Promise (resolve, reject) ->
postRequest(diagUrl, diagnosisBody, storesConnectionObject)
因为下面的行没有缩进,所以第一行之后的任何内容都不被视为承诺的一部分,并且您的mycolpromise
方法返回一个空承诺
现在,最后讨论承诺的内容(异步调用本身)。您还没有说明如何定义
postRequest
,但是您调用它的方式似乎并不异步。请记住,除了ES7await
、promissions和占用cpu的循环之外,Javascript支持异步的唯一方式是calbacks。因此,如果postRequest
有一个回调api,您可以使用incovation提供回调,并在回调体内部调用resolve
或reject
。另一方面,如果postRequest
提供了一个promise api,那么您可以链接。然后->解析(“成功”)
,这样的我会回答我自己的问题,在StackOverflow中保持跟踪
我的问题是语法方面
我更改了postRequest
以返回一个承诺,如果请求返回状态码200,则解决问题,如果返回错误,则拒绝,并将这两个函数链接到一个承诺中,如下所示:
myCoolPromise = (diagUrl, diagnosisBody, storesUrl, brandBody) ->
return new Promise (resolve, reject) ->
postRequest(diagUrl, diagnosisBody)
.then (storesConnectionObject) ->
postRequest(storesUrl, brandBody)
.then (storesObject) ->
resolve handleResult(storesObject, storesConnectionObject)
.catch (error1) ->
reject error1
.catch (error2) ->
reject error2
我仍然愿意找到更好的方法来解决这个问题,谢谢我的
postRequest
函数的结构是这样的postRequest=(postrl,postBody,postArray)->
我不明白为什么handleresult
现在仍然是先触发的,调用3个函数的顺序与没有承诺时相同,和console.log“stuff worked”未显示,例如避免!只是返回承诺。all(postRequest(…),postRequest(…)]。然后(handleResult)
?我不明白myColPromise
应该做什么。它看起来根本不是异步的,成功
总是正确的,所以你不应该在这里使用承诺?