String.replace()没有发生Javascript / Typescript变量赋值

时间:2017-03-25 06:46:13

标签: javascript node.js typescript

我知道这可能是很多人问的问题。我的问题是我的变量没有被赋予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#

请帮帮我:)。

1 个答案:

答案 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();
                        }
                    }
                }
            });  

参考链接: