Javascript 解决导致错误的承诺
我一直在尝试循环通过一个ID数组,并将它们传递到一个调用API的函数(this.handleTransfer)中。我希望下一次迭代只在收到上一次迭代的响应时启动。 我决定用谷歌搜索如何使用承诺来做到这一点。 但是,当我实现我在网上得到的东西时,在第一次迭代之后出现了以下错误:Javascript 解决导致错误的承诺,javascript,arrays,vue.js,promise,sequence,Javascript,Arrays,Vue.js,Promise,Sequence,我一直在尝试循环通过一个ID数组,并将它们传递到一个调用API的函数(this.handleTransfer)中。我希望下一次迭代只在收到上一次迭代的响应时启动。 我决定用谷歌搜索如何使用承诺来做到这一点。 但是,当我实现我在网上得到的东西时,在第一次迭代之后出现了以下错误: TypeError: e(...).then is not a function. 源代码是这段代码中的错误 return e().then(Array.prototype.concat.bind(t)) 我的代码如
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框架。通过阅读您发布的示例代码,我做了一些假设
- 首先,从您使用的
我假设。。。然后(result=>func()。然后…
返回一个 函数,该函数返回一个承诺this.handleTransfer(payment)
- 第二,从你的使用 关于连接,我假设API调用发回的数据是 数组
promiseSerial
实现返回一个承诺链,该承诺链解析为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
这个。HandletTransfer(payment)
不会返回承诺?那么async await呢?它将更容易构建您的序列,。然后(res=>[…result,res])
比该函数可读性更强binding@JonasWilms谢谢你指出这一点。很明显,这是手转帐(付款)我接受了你的承诺,因为你给了我另一种方法来解决我的问题。谢谢你,伙计。。