簡體   English   中英

順序解決承諾會導致錯誤

[英]Resolve promises sequentially resulting in error

我一直試圖遍歷一組ID並將它們傳遞到調用API的函數(this.handleTransfer)中。 我希望僅在收到前一迭代的響應時才啟動下一個迭代。 我決定用谷歌搜索谷歌如何使用promise來做到這一點。 但是當我實現上線的內容時,第一次迭代后就會出現以下錯誤:

TypeError: e(...).then is not a function.

出處是錯誤是此代碼塊

return e().then(Array.prototype.concat.bind(t))

我的代碼如下:

const promiseSerial = funcs =>
        funcs.reduce((promise, func) =>
          promise.then(result => func().then(Array.prototype.concat.bind(result))),
          Promise.resolve([]))

        const payments = this.payIDArray;

        const funcs = payments.map(payment => () => this.handleTransfer(payment))

        promiseSerial(funcs)
        .then(console.log.bind(console))
        .catch(console.error.bind(console))

我正在使用VueJS框架。

通讀您發布的示例代碼,我做了一些假設。

  • 首先,根據您對... promise.then(result => func().then ...使用)的假設,我假設this.handleTransfer(payment)返回一個函數,而該函數返回一個promise。
  • 其次,從連接的使用出發,我假設您的API調用發回的數據是一個數組。

下面的promiseSerial實現返回一個promise鏈,該鏈解析為this.handleTransfer(payments)調用返回的所有數組的串聯,同時保留調用的順序。

const promiseSerial = (funcs) => funcs.reduce((resultPromise, apiPromise) => {
    return resultPromise.then((concatenatedAPIResponses) => {
        const apiCallPromise = apiPromise(); //because this.handleTransfer(payment) returns a function  
        //const apiCallPromise = apiPromise; if this.handleTransfer(payment) returns a promise instead of a function

        return apiCallPromise.then((apiCallResponse) => {
            concatenatedAPIResponses = concatenatedAPIResponses.concat(apiCallResponse)
            return concatenatedAPIResponses
        })
    })
}, Promise.resolve([]))

Codepen 在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM