簡體   English   中英

從回調函數中將值返回給String.replace

[英]Return a value to String.replace from within a callback function

我想從回調函數String.replace值返回給String.replace 鍵入並發布代碼使我意識到這是多么愚蠢。

但是,我希望有一種方法可以用實際有效的代碼實現相同的概念。 我覺得它就在我眼前,我只是無法抓住它。

content.replace(/{{(.*?)}}/g, function (a, b) { 

  recurse(b, function(content2) {
    return content2;
  });

});

不知道我是否理解了您的意思,但是如果您打算將某些內容從內部函數返回到外部函數,則應該遵循以下內容:

content.replace(/{{(.*?)}}/g, function (a, b) { 

  return recurse(b, function(content2) {
    return content2;
  });

});

如果您要查找替換中的表達式:

function replacer(matchedSubstring, p1, p2, offset, totalString) {
  return p2 + ' ' + p1.toUpperCase();
}

newString = oldString.replace(/(\w+)\s(\w+)/, replacer);

請注意,RegExp中的組數和替換程序的參數列表(此處為p1,p2)中的參數數必須匹配。

參見MDN上的String.replace(): https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec

您可以實現一些(可能很糟糕)的“鎖定”概念。 我在這里寬松地使用術語“鎖定”。 無論如何,它將迫使您的代碼同步。

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線程。 從其他線程調用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM