我知道这可能是很多人问的问题。我的问题是我的变量没有被赋予String.replace()返回的值。
这是我的代码:
updateInputFiles(item: IExecutionModel, callback: (error: any, result: any) => void) {
...
...
let args: string[] = field.fieldValue.split("#");
for(let i = 0; i < args.length; i++) {
//console.log("Inside loop: ", args[i]);
if(args[i] === "executionId") {
field.fieldValue = field.fieldValue.replace("#" + args[i] + "#", item.executionId).toString();
}
if(args[i] === "market"){
this.getReference(args[i], job.application, item.market, (error, result) => {
if(result) {
for(let value of result.values) {
if(value.codeValue === item.market) {
field.fieldValue = field.fieldValue.replace("#" + args[i] + "#", value.resolvedValue).toString();
}
}
}
});
}
}
...
...
}
示例field.fieldValue将是“/path/to/file/somename_#market#something#executionId#.txt”
只有 #executionId#部分被替换,无论我怎么尝试都无法取代 #market#
请帮帮我:)。
答案 0 :(得分:0)
您的this.getReference
似乎是async
函数,因为您使用回调函数来替换#market#
占位符。因此,即使在this.getReference
完成执行并返回值之前,您尝试使用替换值也很有可能,从而执行回调。
如果你宣传调用this.getReference
会更好,使用TypeScript async/await
很容易做到。
然后你可以像这样重构你的代码(未经测试):
async getReference(parameters):Promise //return type optional
{
//do your magic and return a promise.
}
//invoke as:
await this.getReference(...)
.then((error, result) => {
if(result) {
for(let value of result.values) {
if(value.codeValue === item.market) {
field.fieldValue = field.fieldValue.replace("#" + args[i] + "#", value.resolvedValue).toString();
}
}
}
});
参考链接: