我有下面的代码,它似乎调用 var promiseFeedback 我不知道为什么。。。这意味着即使在创建文档时发生错误,也会调用它。然而,只有在没有 err
var promiseFeedback
err
有人能弄清楚原因吗?
if (json) { createDocument(documentUrl, context, json, function(res){ var promiseFeedback = callFB (context, res); var collection = `mydb` client.createDocument(collection, res, (err, result) => { if(err) { context.log(err); return context.done(); } else { Promise.all([promiseFeedback]).then(function(results){ context.log("promiseFeedback: " + results[0]); context.done(); }); } }); }); } function callFB(context, res) { return new Promise((resolve, reject) => { var requestUrl = url.parse( URL ); var requestBody = { "id": res.id }; var body = JSON.stringify( requestBody ); const requestOptions = { hostname: requestUrl.hostname, path: requestUrl.path, method: 'POST', headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(body), } }; var request = https.request(requestOptions, function(res) { var data =""; res.on('data', function (chunk) { data += chunk }); res.on('end', function () { resolve(true); }) }).on('error', function(error) { context.log("request error:", error); resolve(false); }); request.write(body); request.end(); }); }
var promiseFeedback = callFB (context, res);
此语句执行 callFB 立即,不只是给承诺起另一个名字。这个承诺 超出的回调(范围) err 和 Promise.all([promiseFeedback]) client.createDocument 是。
callFB
Promise.all([promiseFeedback])
client.createDocument
要解决此问题:
删除 var promiseFeedback = callFB (context, res); 和改变 到 callFB(context, res) . 你不需要使用 Promise.all 因为你只有一个承诺要解决。
callFB(context, res)
Promise.all
var promiseffeedback=callFB(上下文,res); 进入其他部分。
var promiseffeedback=callFB(上下文,res);