我想从回调函数中将值返回String.replace
。
打字并发布代码让我意识到这是多么愚蠢。
但是,我希望有一种方法可以实现与实际工作的代码相同的概念。我觉得它就在我面前,我无法掌握它。
content.replace(/{{(.*?)}}/g, function (a, b) {
recurse(b, function(content2) {
return content2;
});
});
答案 0 :(得分:1)
不确定我是否理解了你的意思,但是如果你打算从内部函数返回到外部函数,你应该遵循这样的事情:
content.replace(/{{(.*?)}}/g, function (a, b) {
return recurse(b, function(content2) {
return content2;
});
});
答案 1 :(得分:0)
如果你在替换中寻找表达式:
function replacer(matchedSubstring, p1, p2, offset, totalString) {
return p2 + ' ' + p1.toUpperCase();
}
newString = oldString.replace(/(\w+)\s(\w+)/, replacer);
请注意,RegExp中的组数和replacer的参数列表中的参数数量(此处:p1,p2)必须匹配。
请参阅MDN上的String.replace():https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec
答案 2 :(得分:0)
你可以实现一些(可能很糟糕的)“锁定”概念。我在这里松散地使用术语“锁定”。无论如何,它会迫使你的代码同步。
content.replace(/{{(.*?)}}/g, function (a, b) {
var myFakeLock = false;
var outputToReplace = null;
var otherCallback = function(someInput) {
... // do some stuff here
outputToReplace = someCalculationResult;
myFakeLock = true; // last line!
};
// Call asynchronous function
someFunctionWithCallback(otherCallback);
// Busy-wait until our callback completes
while (!myFakeLock) { }
return outputToReplace;
});
我没有注意形成一个合适的闭合或任何东西,因此可能需要进行一些修改。
在此解决方案中,在完成所有异步计算之前,String.replace
回调不会返回。小心你如何使用它。您不希望以这种方式锁定UI线程;从其他一些帖子中调用它。