FXu*_*Xux 2 javascript node.js promise
我正在创建一个Node.js模块来与我的API进行交互,我使用superagent模块来执行请求.这个怎么运作:
module.exports = data => {
return getUploadUrl()
.then(uploadFiles)
.then(initializeSwam)
function getUploadUrl() {
const request = superagent.get(....)
return request
}
function uploadFiles(responseFromGetUploadUrl) {
const request = superagent.post(responseFromGetUploadUrl.body.url)
// attach files that are in data.files
return request
}
function initializeSwam(responseFromUploadFilesRequest) {
// Same thing here. I need access data and repsonseFromUploadFilesRequest.body
}
}
Run Code Online (Sandbox Code Playgroud)
我觉得我做错了,但我想不出更好的方法来达到同样的效果.
两种简单方法:
编写你的函数来获取它需要的所有参数
const doStuff = data =>
getUploadUrl()
.then(uploadFiles)
.then(initializeSwam)
Run Code Online (Sandbox Code Playgroud)
可能成为
const doStuff = data =>
getUploadUrl()
.then(parseResponseUrl) // (response) => response.body.url
.then(url => uploadFiles(data, url))
.then(parseResponseUrl) // same function as above
.then(url => initializeSwam(data, url))
Run Code Online (Sandbox Code Playgroud)这应该工作得很好(或者很好,取决于你在那些功能中挥手的东西).
部分应用你的功能
const uploadFiles = (data) => (url) => {
return doOtherStuff(url, data);
};
// same deal with the other
const doStuff = data =>
getUploadUrl()
.then(parseResponseUrl)
.then(uploadFiles(data)) // returns (url) => { ... }
.then(parseResponseUrl)
.then(initializeSwam(data));
Run Code Online (Sandbox Code Playgroud)所有这些技术(合理的时间和地点)的混合应该足以满足您的许多需求.
| 归档时间: |
|
| 查看次数: |
44 次 |
| 最近记录: |