承诺与CoffeeScript的
上下文2个异步函数:承诺与CoffeeScript的
我需要调用一个函数(函数A)来进行HTTP请求两个时间,在此之后,我需要调用另一个fonction(函数B),其计算两个阵列
正常顺序应该是
- (功能A &函数A)异步
- 当2-其它完成后,功能B
所以我让自己承诺,但这里是问题,我想不出如何正确的语法,我使用Coffeescript。
这是我走到这一步,但现在它不工作
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 new Promise
行之后的缩进是绝对必要的。现在你有这样的:
return new Promise (resolve, reject) ->
postRequest(diagUrl, diagnosisBody, storesConnectionObject)
由于以下行不缩进,即第一行后什么是不承诺的考虑的一部分,你的myCoolPromise
方法返回一个空的承诺。
现在最后,到承诺的内容(异步调用本身)。您尚未显示如何定义postRequest
,但您调用它的方式似乎不是异步。请记住,除了ES7 await
,promises和cpu-hogging循环,Javascript支持异步的唯一方式是回调。因此,如果postRequest
有一个回调API,则您在回调体内提供回调并调用resolve
或reject
。在另一方面,如果postRequest
提供承诺的API,你可以在.then -> resolve("success")
和这样
我'postRequest'功能的结构是这样 'postRequest =(postUrl,postBody,postArray) - >' 我不明白为什么'handleresult'仍然触发第一 目前,3个功能调用但以相同的顺序比没有诺言,并且console.log'东西工作'不示例为 –
链我回答我的问题,以保持一丝的*
我的问题是语法侧
我改变postRequest
返回一个承诺,解决如果请求得到回来的StatusCode 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
我还是开出了更好的方式来解决这个,谢谢
我不明白'myCoolPromise'应该做什么。它似乎不是异步的,“成功”永远是真的,所以你不应该在这里使用promise? – Bergi