【发布时间】:2019-01-14 12:22:59
【问题描述】:
我有以下无法解析的代码。 f2 解决了,所以我不会添加那个代码,我有问题是 f1。
我调用该函数并进入最里面,如果它调用函数“find”,该函数执行函数findId,它完美地返回Id,然后它执行editId,但它不解决document replaced + true 我知道它会在上下文日志出现时到达。
预期行为:
这应该解决回到最高承诺并到达context.done(),但它没有
这可能是一个简单的问题,就我在哪里放置新的承诺等而言,但我一直在努力解决这个问题的结构。
感谢您的任何见解。
module.exports = function (context, req) {
var documentUrl = xyz;
client.readDocument(documentUrl, (err, a) => {
var f1 = fun1(a,b,c);
var f2 = fun2(a,b,c);
Promise.all([f1, f2]).then(function(results){ //parallel
context.log(results[0], results[1]);
context.done();
});
});
}
function fun1 (a,b,c){
if (a[0].stuff.length > 0) {
var stuffArray = [];
for (i = 0; i < a[0].stuff.length; i++) {
if (a[0].stuff[i].morestuff !== null && a[0].stuff[i].otherstuff !== null) {
if (a[0].stuff[i].Id== null) {
var Id = a[0].id + '_' + i;
var find = findId (a, Id, function(res){
context.log ("findFeedback: found");
context.log(res);
editId(context, res);
});
stuffArray.push(find);
}
} else {
stuffArray.push(i + " shouldn't have Id");
}
}
return Promise.all(stuffArray);
} else {
return ('No stuff');
}
}
function findId(a, Id, callback) {
var documentUrl = myUrl/id;
client.readDocument(documentUrl, (err, result) => {
if (err) {
if (err) {
return(err);
}
} else {
callback(result);
}
});
}
function editId(context, res) {
return new Promise((resolve, reject) => {
var documentUrl = myUrl/res.otherId;
client.readDocument(documentUrl, (err, result) => {
if (err) {
if (err.code == HttpStatusCodes.NOTFOUND) {
context.log('Post does not exist');
resolve('Post does not exist');
} else {
context.log(err);
resolve(err);
}
} else {
context.log('Post exists');
// here i edit some stuff which works fine
client.replaceDocument(documentUrl, result, (err, result) => {
if(err) {
context.log(err);
resolve('Document replaced ' + false);
} else {
context.log('replaced document ' + result);
resolve('Document replaced ' + true);
// This is where my context log ends it does not resolve back up
}
});
}
});
});
};
【问题讨论】:
-
字符串与布尔连接? fun1 在哪里?
-
我不明白这意味着什么抱歉 - 我对此很陌生!
-
你正在解析
'Document replaced ' + true这是字符串和布尔似乎不正确 -
嗯,这在其他地方对我有用,我很确定 - 我刚刚尝试将其全部设为字符串,但仍然存在同样的问题,我相信这与解决承诺有关。
-
抱歉,我已将
function f1编辑为function fun1
标签: javascript node.js promise resolve