Javascript 按顺序运行承诺
我的顺序是:Javascript 按顺序运行承诺,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,我的顺序是: 将文件从本地服务器发布到dropbox 从本地服务器删除文件(成功发布后) 为最近发布的文件创建可共享链接 向用户发送新的可共享链接 (请注意,我使用的是Dropbox API v2) 我的代码: 我正在使用库。 let upload = (req,res) => { let options = { method: 'POST', uri: 'https://content.dropboxapi.com/2/files/upload', head
- 将文件从本地服务器发布到dropbox
- 从本地服务器删除文件(成功发布后)
- 为最近发布的文件创建可共享链接
- 向用户发送新的可共享链接
let upload = (req,res) => {
let options = {
method: 'POST',
uri: 'https://content.dropboxapi.com/2/files/upload',
headers: {
'Authorization': 'Bearer Token here',
'Dropbox-API-Arg': "{\"path\": \"/test/"+req.file.originalname+"\",\"mode\": \"overwrite\",\"autorename\": true,\"mute\": false}",
'Content-Type': 'application/octet-stream'
},body: fs.createReadStream(`uploads/${req.file.originalname}`)
};
rp(options)
.then(() => {return _deleteLocalFile(req.file.originalname)})
.then(() => {return _generateShareableLink(req.file.originalname)}) // This makes a POST request to the Dropbox API and should return a link.
.then((shareableLink) => {sendJsonResponse(res, 200, shareableLink)})
.catch(function (err) {sendJsonResponse(res, 500, err)});
};
根据我的理解(如果我错了请纠正我)承诺并行运行,并超时返回一个值(以先解决的承诺为准)。我如何以特定的顺序运行承诺?我的承诺是否符合最佳实践?如果在链中使用,您的承诺将按顺序起作用。 我可以建议您也使用ES8
async/await
特性来获得更漂亮的代码
let upload = async (req,res) => {
let options = {
method: 'POST',
uri: 'https://content.dropboxapi.com/2/files/upload',
headers: {
'Authorization': 'Bearer Token here',
'Dropbox-API-Arg': "{\"path\": \"/test/"+req.file.originalname+"\",\"mode\": \"overwrite\",\"autorename\": true,\"mute\": false}",
'Content-Type': 'application/octet-stream'
},body: fs.createReadStream(`uploads/${req.file.originalname}`)
};
try {
const request = await rp(options);
const dlf = await _deleteLocalFile(req.file.originalname);
const shareableLink= await _generateShareableLink(req.file.originalname);
const sendedResponse = await sendJsonResponse(res, 200, shareableLink);
} catch(e) {
await sendJsonResponse(res, 500, err);
}
}
当你链接
then
ables时,它们并不是以可能最坏的方式并行运行,但我使用的最简单的方法是使用.then()
处理程序中的fetch启动一个新的“child”承诺。@SterlingArcher啊,我不知道!!因此,当我使用then()
链接承诺时,它们按顺序运行?正确,因为。then
在执行之前等待回调。所以承诺链总是按顺序排列的,除非它失败了。同时,它们都会在已解析的外部执行自己的调用promise@SterlingArcher很抱歉问了这个问题。我不知道.then()
是按顺序运行的。这太棒了。代码要干净得多。我不知道ES8的这个新特性。似乎我需要通读ES8功能列表。谢谢你的回答!对不起,我有一个简短的问题。try
块中的代码是否也按顺序运行?是的,它按顺序工作,只需在Promise ResultHanks前使用Wait
。这很有帮助!