createDatabase(){
request({
url: `http://${nodeName}:port?format=json`,
auth: {
'username': 'admin',
'password': 'admin',
'sendImmediately': false
},
method: 'POST',
json: true,
body: payload
},
function (error, response, body) {
if (response.statusCode != "201") {
resolve(response.statusCode);
done();
}
else {
reject();
done();
}
})
}
这是我用来在我的应用程序中创建数据库的代码。我需要创建多个数据库示例 - db1,db2,db3等。 在这种情况下,我想为此实现一个循环。但由于这是异步,我无法处理相同的问题。 请建议在这种情况下如何处理承诺。
答案 0 :(得分:0)
首先,我使用了request-promise模块,它将request()
替换为一个返回promise的函数,这样你就可以使用promises而不是普通的回调来管理事情的完成。
然后,如果您可以并行创建所有数据库,只需知道它们何时完成,您就可以这样做:
const rp = require('request-promise');
function createDatabase(payload) {
return rp({
url: `http://${nodeName}:port?format=json`,
auth: {
'username': 'admin',
'password': 'admin',
'sendImmediately': false
},
method: 'POST',
json: true,
body: payload
});
}
let promises = [];
// some for loop that creates separate payloads to pass to createDatabase
for (...) {
// create payload for each database here
promises.push(createDatabase(...));
}
Promise.all(promises).then(function(results){
// process array of results here
}).catch(function(err) {
// handle error here
});
这会收集每次调用createDatabase()
到一个数组中的承诺,然后使用Promise.all()
告诉我们所有这些承诺何时完成,并将所有承诺的已解析值提供给{{1数组。