我为自定义确认框编写了一些代码,该框在按下确认按钮(是按钮)时调用函数并将另一个函数作为参数传递,并将其绑定到具有不同功能的 2 个不同按钮点击作为参数。例如:
$('#button1').click(function() {
callFunction(function() { alert("test"); });
});
$('#button2').click(function() {
callFunction(function() { alert("test2"); });
});
function callFunction(callback) {
//code to display custom confirm box
console.log(callback);
$('.confirm-box .yes-button').click(function() {
callback();
});
}
Run Code Online (Sandbox Code Playgroud)
一切都按预期发生,确认框出现,点击确认按钮时,我执行了一个回调函数,它会提醒“测试”(或“test2”,具体取决于哪个按钮称为确认框)。当我单击发送提醒“test”的函数的 button1 时,问题出现了,然后不是确认我取消它(没有按预期发生),然后单击将 alert("test2") 作为回调函数传递的 button2。现在,一旦我按下 yes 按钮而不是只提示“test2”,我就会同时收到“test2”和“test”提示,即使我写的 console.log 只记录了在那个 button2 时提示“test2”的函数点击。似乎这些回调函数堆积在某个地方,但我不明白在哪里以及为什么。
我真的很难尝试在异步soap请求中调用对象函数。它基本上归结为:
function Thing(request, response) {
this.foo = function() {
console.log("this is foo");
}
this.doThing = function() {
// Get SOAP args
args = { foo: this.request.cookies.foo };
// From the SOAP npm package library
soap.createClient(function(err, client) {
client.doSomething(args, function(err, result) {
// Somehow call foo(); <--- CAN'T FIND A WAY TO DO THIS
});
});
}
}
// Make it so I can access this.request and this.response somehow
Thing.prototype = Object.create(AbstractThing);
Run Code Online (Sandbox Code Playgroud)
我尝试了很多东西,但我相信它从根本上归结为我无法调用this.foo()任何异步肥皂函数的事实。虽然我可以将回调函数传递给createClient,如下所示:
function Thing(request, response) { …Run Code Online (Sandbox Code Playgroud) 我正在努力熟悉 JavaScript 术语。我想我对iteratee、callback和function factory术语感到困惑
让我用下面这个愚蠢的例子:
//this function accept an array and then returns a new array that
//contains the elements of the first array altered by func
function mapForEach(arr, func) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
newArr.push(func(arr[i]));
}
return newArr;
}
//this function multiplies two numbers
var multiply = function (a, b) {
console.log(a * b);
};
//this is a silly function that passes a …Run Code Online (Sandbox Code Playgroud) 所以在我的 React 组件中,我有这个:
this.props.updateAlertCallback('error', ERROR_MESSAGE)
Run Code Online (Sandbox Code Playgroud)
我的updateAlertCallback做法是:
export const updateAlert = (alert, message) => {
return {
type: 'UPDATE_ALERT',
alert,
message
}
}
export const updateAlertCallback = (alert, message) => {
return dispatch => {
return dispatch(updateAlert(alert, message)).then(() => {
console.log('Done!');
});
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:Uncaught TypeError: dispatch(...).then is not a function
updateAlert运行完成后记录某些内容的正确方法是什么?
首先,看看这个样本:
var calculate = function(callback) {
// calculating...
callback(5);
}
var parent = function() {
var x = 0;
var calculatedValue = calculate(function(output) {
return output; // return #1
x = output;
});
return x; // return #2
return calculatedValue; // return #3
}
Run Code Online (Sandbox Code Playgroud)
我的目标是在calculate函数内“计算”一个值,并且该值必须由parent函数返回。
为了实现这一点,我应该在哪里放置 return 语句,我应该用它返回什么?
我尝试了 3 种情况:
return #1
这里的output值是由callback函数返回的,而不是parent函数,所以 parent 返回 undefined。
return #2
这里x的值是在执行callback函数之前返回的,所以parent返回0。
return #3+return #1
在这里,我试图返回output从 …
我们的一些客户希望向他们报告他们的 Google Analytics ID。得到它并不难。
ga.getAll()[0].get('clientId');
还有一个排队语法,以便在设置 GA 时完成操作。
但是不想在 GA 准备好时发送 GA 事件。准备好后我想问 GA 一个问题。
也许有某种方式可以对 GA 说“当你准备好了,运行这个函数,我传递给你。”
或者,GA 是否在准备好时发出自定义事件?
目前,当窗口发出加载事件时,我的客户正在调用我的代码。但即便如此,仍有一小部分时间 ga 未定义。如果您等待几秒钟,则它已定义。也许一些奇怪的cdn系统。无论如何,我需要一种可靠的方法来确定 GA 何时准备就绪。
(我无法使评论中的格式配合,所以我改变了我的问题来回应 Feathercrown。)
听起来不错!唯一的问题是 ga 尚未定义。这是我自己发送的错误消息示例。
"type": "Page View",
"data": {
"error": {
"message": "ga.getAll is not a function. (In 'ga.getAll()', 'ga.getAll' is undefined)",
"message2": "window.GoogleAnalyticsObject = ga",
"message3": "typeof ga is not Object"
}
},
也许 _gxx 符号已经可用?
我正在尽我最大的努力避免我的 Node JS 回调地狱。但是我正在尝试发出大量 api 请求并将它们插入到我的数据库中。
我的问题(当然)是我的 for 循环在完成请求和数据库插入之前运行并增加 i 。
for(var i = 0; i <= 1 ; i++){
apiRequest = data[i];
apicall(apiRequest);
}
function apicall(urlApi){
request((urlApi), function(error, response, body){
if(error){
console.log("error");
} else if(!error && response.statusCode == 200){
var myobj = JSON.parse(body);
dbInsert(myobj);
}
});
}
function dbInsert(obj) {
//insert into database
}
Run Code Online (Sandbox Code Playgroud)
如果其他人会问这个问题,我可以真正推荐这篇博文,这是我在阅读joshvermaire的回复后发现的:
我有 2 个模型:
Card belongs_to :template, optional: true
Template has_many :cards
Run Code Online (Sandbox Code Playgroud)
我想向 Card 添加回调:
before_save :set_status, if: self.template.exists?
Run Code Online (Sandbox Code Playgroud)
但这会引发错误,即 Card 类没有方法“模板”?
我也试过:
before_save :set_status, if: self.attributes.has_key? "template_id"
Run Code Online (Sandbox Code Playgroud)
和:
before_save :set_status, if: self.template.nil?
Run Code Online (Sandbox Code Playgroud)
(这也NoMethodError (undefined method为#`提供了模板'))
和:
before_save :set_status, if: self.template.present?
Run Code Online (Sandbox Code Playgroud)
那么如何检查 Card 是否有模板呢?
编辑
这有效,但为什么这项工作有效而上述无效?似乎 self.template 必须在方法调用中。
before_save :set_status, if: :template_exists?
def template_exists?
return !self.template.nil?
end
Run Code Online (Sandbox Code Playgroud) 我有一个一直在努力解决的承诺链问题。我调用一个外部 api,它返回我需要处理的数据并将其摄取到 mongo 数据库中。我正在将 nodejs 和 mongodb 与 express 一起使用。无论如何,对 api 的调用工作正常,问题是我正在同时制作大量的调用。我想放慢他们的速度,就像为一组打所有电话一样。等一下。为下一组发出所有呼叫。如果这是已知数量的集合,我会承诺将它们链接起来。我不知道有多少套,所以我在循环它们。我认为关闭是问题,但无法解决它。到示例代码!
function readApi(carFactory){
var promise = new Promise(function(resolve, reject) {
// call out to api, get set of car data from factory1
console.log(carFactory);
if (true) {
console.log('resolved');
resolve("Stuff worked!"+carFactory);
}
else {
reject(Error("It broke"));
}
});
return promise;
}
function manager(){
//singular call
readApi("this is a singular test").then(returnedThing=>{
console.log(returnedThing); //Stuff worked! this is a singular test
});
let dynamicList = ["carFactory1", "carFactory2","carFactory3","carFactory..N"];
let readApiAction = [];
dynamicList.forEach(carIter=>{
readApiAction.push(readApi(carIter));
}); …Run Code Online (Sandbox Code Playgroud) 使用 NServiceBus 6 的回调功能,我发现无法提醒客户端请求处理程序失败。请求处理程序将经历所有可恢复性步骤,并最终将消息放入错误队列。同时,客户端只是坐在那里等待它的回复。
// Client code (e.g. in an MVC Controller)
var message = new FooRequest();
var response = await endpoint.Request<FooReponse>(message);
// Handler code
public class FooRequestHandler : IHandleMessages<FooRequest>
{
Task Handle(FooRequest message, IMessageHandlerContext context)
{
throw new Exception("Fails before the reply");
return context.Reply(new FooResponse());
}
}
Run Code Online (Sandbox Code Playgroud)
在上述情况下,如何让 MVC 控制器/调用代码知道处理程序已永久失败?
error-handling callback nservicebus nservicebus6 request-response
callback ×10
javascript ×6
node.js ×3
async-await ×1
asynchronous ×1
factory ×1
function ×1
iterate ×1
jquery ×1
loops ×1
nservicebus ×1
nservicebus6 ×1
promise ×1
reactjs ×1
redux ×1
redux-thunk ×1
request ×1
shopify ×1
soap ×1
terminology ×1