В то время как обещания и обратные вызовы хорошо работают во многих ситуациях, боль в задней части выражает нечто вроде:
if (!name) {
name = async1();
}
async2(name);
. В итоге вы пройдете через async1
; проверьте, не определено ли name
или нет, и соответственно вызовите обратный вызов.
async1(name, callback) {
if (name)
callback(name)
else {
doSomething(callback)
}
}
async1(name, async2)
Хотя в в порядке хорошо , это раздражает, когда у вас много подобных случаев и обработка ошибок. Вы можете проверить проект здесь . Fibers
помогает в решении проблемы. var Fiber = require('fibers')
function async1(container) {
var current = Fiber.current
var result
doSomething(function(name) {
result = name
fiber.run()
})
Fiber.yield()
return result
}
Fiber(function() {
var name
if (!name) {
name = async1()
}
async2(name)
// Make any number of async calls from here
}
Я не думаю, что вы можете явно указать цвета в aes
; вам нужно сделать это в scale_fill_manual
, как в следующем примере:
ggplot(dist.x, aes(x = sim_con)) +
geom_histogram(colour = "black", binwidth = .01,aes(fill=(sim_con==1.55))) +
scale_fill_manual(values=c('TRUE'='darkgreen','FALSE'='firebrick')) +
theme(legend.position="none")
[/g0]
Вы так близки!
В вашем коде выше ggplot интерпретирует вашу заливку как переменные в вашем наборе данных darkgreen
и factor firebrick
- и не имеет никакого способа зная, что эти метки являются цветами , а не, скажем, названиями видов животных.
Если вы добавите scale_fill_identity()
в конец вашего графика, как показано ниже, он будет интерпретировать эти строки в виде цветов (идентификатор ), а не как функции данных.
Одно из преимуществ этого подхода - отличный ответ от превосходного марата выше: если у вас сложный сюжет (скажем, , используя geom_segment()
, со стартовым значением и конечным значением для каждого наблюдения), и вы хотите применить две заполняющие шкалы на своих данных (одна шкала для начального значения и другая шкала для конечного значения), вы можете выполнить условное логики на этапе обработки данных, затем используйте scale_fill_identity()
для соответствующего цветного наблюдения.
ggplot(
data=dist.x,
aes(
x = sim_con,
fill = ifelse(dist.x$sim_con==1.55, "darkgreen", "firebrick")
)
) +
geom_histogram(
colour = "black",
binwidth = .01
) +
theme(legend.position="none") +
scale_fill_identity()